<?xml version='1.0' encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html lang="en" xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <link href="cpip.css" rel="stylesheet" type="text/css" />
    <title>File: /Users/paulross/dev/linux/linux-3.13/arch/x86/include/asm/percpu.h</title>
  </head>
  <body>
    <h1>File: /Users/paulross/dev/linux/linux-3.13/arch/x86/include/asm/percpu.h</h1>
    <p>Green shading in the line number column
means the source is part of the translation unit, red means it is conditionally excluded.
Highlighted line numbers link to the translation unit page. Highlighted macros link to
the macro page.</p>
    <pre><a name="1" /><span class="Maybe">       1:</span> <span class="f">#</span><span class="n">ifndef</span> <a href="cpu.c_macros_ref.html#_X0FTTV9YODZfUEVSQ1BVX0hfMA__"><span class="b">_ASM_X86_PERCPU_H</span></a>
<a name="2" /><span class="Maybe">       2:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_X0FTTV9YODZfUEVSQ1BVX0hfMA__"><span class="b">_ASM_X86_PERCPU_H</span></a>
<a name="3" /><span class="Maybe">       3:</span> 
<a name="4" /><span class="Maybe">       4:</span> <span class="f">#</span><span class="n">ifdef</span> <a href="cpu.c_macros_ref.html#_Q09ORklHX1g4Nl82NF8w"><span class="b">CONFIG_X86_64</span></a>
<a name="5" /><span class="Maybe">       5:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_X19wZXJjcHVfc2VnXzA_"><span class="b">__percpu_seg</span></a>        <span class="b">gs</span>
<a name="6" /><span class="Maybe">       6:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_X19wZXJjcHVfbW92X29wXzA_"><span class="b">__percpu_mov_op</span></a>        <span class="b">movq</span>
<a name="7" /><span class="False">       7:</span> <span class="f">#</span><span class="n">else</span>
<a name="8" /><span class="False">       8:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_X19wZXJjcHVfc2VnXzA_"><span class="b">__percpu_seg</span></a>        <span class="b">fs</span>
<a name="9" /><span class="False">       9:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_X19wZXJjcHVfbW92X29wXzA_"><span class="b">__percpu_mov_op</span></a>        <span class="b">movl</span>
<a name="10" /><span class="Maybe">      10:</span> <span class="f">#</span><span class="n">endif</span>
<a name="11" /><span class="Maybe">      11:</span> 
<a name="12" /><span class="False">      12:</span> <span class="f">#</span><span class="n">ifdef</span> <span class="b">__ASSEMBLY__</span>
<a name="13" /><span class="False">      13:</span> 
<a name="14" /><span class="False">      14:</span> <span class="k">/*</span>
<a name="15" /><span class="False">      15:</span> <span class="k"> * PER_CPU finds an address of a per-cpu variable.</span>
<a name="16" /><span class="False">      16:</span> <span class="k"> *</span>
<a name="17" /><span class="False">      17:</span> <span class="k"> * Args:</span>
<a name="18" /><span class="False">      18:</span> <span class="k"> *    var - variable name</span>
<a name="19" /><span class="False">      19:</span> <span class="k"> *    reg - 32bit register</span>
<a name="20" /><span class="False">      20:</span> <span class="k"> *</span>
<a name="21" /><span class="False">      21:</span> <span class="k"> * The resulting address is stored in the &quot;reg&quot; argument.</span>
<a name="22" /><span class="False">      22:</span> <span class="k"> *</span>
<a name="23" /><span class="False">      23:</span> <span class="k"> * Example:</span>
<a name="24" /><span class="False">      24:</span> <span class="k"> *    PER_CPU(cpu_gdt_descr, %ebx)</span>
<a name="25" /><span class="False">      25:</span> <span class="k"> */</span>
<a name="26" /><span class="False">      26:</span> <span class="f">#</span><span class="n">ifdef</span> <a href="cpu.c_macros_ref.html#_Q09ORklHX1NNUF8w"><span class="b">CONFIG_SMP</span></a>
<a name="27" /><span class="False">      27:</span> <span class="f">#</span><span class="n">define</span> <span class="b">PER_CPU</span><span class="f">(</span><span class="b">var</span><span class="f">,</span> <span class="b">reg</span><span class="f">)</span>                        \
<a name="28" /><span class="False">      28:</span>     <a href="cpu.c_macros_noref.html#_X19wZXJjcHVfbW92X29wXzA_"><span class="b">__percpu_mov_op</span></a> <span class="f">%</span><a href="cpu.c_macros_ref.html#_X19wZXJjcHVfc2VnXzA_"><span class="b">__percpu_seg</span></a><span class="f">:</span><span class="b">this_cpu_off</span><span class="f">,</span> <span class="b">reg</span><span class="f">;</span>        \
<a name="29" /><span class="False">      29:</span>     <span class="b">lea</span> <span class="b">var</span><span class="f">(</span><span class="b">reg</span><span class="f">)</span><span class="f">,</span> <span class="b">reg</span>
<a name="30" /><span class="False">      30:</span> <span class="f">#</span><span class="n">define</span> <span class="b">PER_CPU_VAR</span><span class="f">(</span><span class="b">var</span><span class="f">)</span>    <span class="f">%</span><a href="cpu.c_macros_ref.html#_X19wZXJjcHVfc2VnXzA_"><span class="b">__percpu_seg</span></a><span class="f">:</span><span class="b">var</span>
<a name="31" /><span class="False">      31:</span> <span class="f">#</span><span class="n">else</span> <span class="k">/* ! SMP */</span>
<a name="32" /><span class="False">      32:</span> <span class="f">#</span><span class="n">define</span> <span class="b">PER_CPU</span><span class="f">(</span><span class="b">var</span><span class="f">,</span> <span class="b">reg</span><span class="f">)</span>    <a href="cpu.c_macros_noref.html#_X19wZXJjcHVfbW92X29wXzA_"><span class="b">__percpu_mov_op</span></a> <span class="g">$</span><span class="b">var</span><span class="f">,</span> <span class="b">reg</span>
<a name="33" /><span class="False">      33:</span> <span class="f">#</span><span class="n">define</span> <span class="b">PER_CPU_VAR</span><span class="f">(</span><span class="b">var</span><span class="f">)</span>    <span class="b">var</span>
<a name="34" /><span class="False">      34:</span> <span class="f">#</span><span class="n">endif</span>    <span class="k">/* SMP */</span>
<a name="35" /><span class="False">      35:</span> 
<a name="36" /><span class="False">      36:</span> <span class="f">#</span><span class="n">ifdef</span> <a href="cpu.c_macros_ref.html#_Q09ORklHX1g4Nl82NF9TTVBfMA__"><span class="b">CONFIG_X86_64_SMP</span></a>
<a name="37" /><span class="False">      37:</span> <span class="f">#</span><span class="n">define</span> <span class="b">INIT_PER_CPU_VAR</span><span class="f">(</span><span class="b">var</span><span class="f">)</span>  <span class="b">init_per_cpu__</span><span class="f">##</span><span class="b">var</span>
<a name="38" /><span class="False">      38:</span> <span class="f">#</span><span class="n">else</span>
<a name="39" /><span class="False">      39:</span> <span class="f">#</span><span class="n">define</span> <span class="b">INIT_PER_CPU_VAR</span><span class="f">(</span><span class="b">var</span><span class="f">)</span>  <span class="b">var</span>
<a name="40" /><span class="False">      40:</span> <span class="f">#</span><span class="n">endif</span>
<a name="41" /><span class="False">      41:</span> 
<a name="42" /><span class="Maybe">      42:</span> <span class="f">#</span><span class="n">else</span> <span class="k">/* ...!ASSEMBLY */</span>
<a name="43" /><span class="Maybe">      43:</span> 
<a name="44" /><span class="Maybe">      44:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="b">linux</span><span class="f">/</span><span class="b">kernel</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="45" /><span class="Maybe">      45:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="b">linux</span><span class="f">/</span><span class="b">stringify</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="46" /><span class="Maybe">      46:</span> 
<a name="47" /><span class="Maybe">      47:</span> <span class="f">#</span><span class="n">ifdef</span> <a href="cpu.c_macros_ref.html#_Q09ORklHX1NNUF8w"><span class="b">CONFIG_SMP</span></a>
<a name="48" /><span class="Maybe">      48:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_X19wZXJjcHVfcHJlZml4XzA_"><span class="b">__percpu_prefix</span></a>        <span class="e">&quot;%%&quot;</span><a href="cpu.c_macros_ref.html#_X19zdHJpbmdpZnlfMA__"><span class="b">__stringify</span></a><span class="f">(</span><a href="cpu.c_macros_ref.html#_X19wZXJjcHVfc2VnXzA_"><span class="b">__percpu_seg</span></a><span class="f">)</span><span class="e">&quot;:&quot;</span>
<a name="49" /><span class="Maybe">      49:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_X19teV9jcHVfb2Zmc2V0XzA_"><span class="b">__my_cpu_offset</span></a>        <a href="cpu.c_macros_ref.html#_dGhpc19jcHVfcmVhZF8w"><span class="b">this_cpu_read</span></a><span class="f">(</span><span class="b">this_cpu_off</span><span class="f">)</span>
<a name="50" /><span class="Maybe">      50:</span> 
<a name="51" /><span class="Maybe">      51:</span> <span class="k">/*</span>
<a name="52" /><span class="Maybe">      52:</span> <span class="k"> * Compared to the generic __my_cpu_offset version, the following</span>
<a name="53" /><span class="Maybe">      53:</span> <span class="k"> * saves one instruction and avoids clobbering a temp register.</span>
<a name="54" /><span class="Maybe">      54:</span> <span class="k"> */</span>
<a name="55" /><span class="Maybe">      55:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_X190aGlzX2NwdV9wdHJfMA__"><span class="b">__this_cpu_ptr</span></a><span class="f">(</span><span class="b">ptr</span><span class="f">)</span>                \
<a name="56" /><span class="Maybe">      56:</span> <span class="f">(</span><span class="f">{</span>                            \
<a name="57" /><span class="Maybe">      57:</span>     <span class="m">unsigned</span> <span class="m">long</span> <span class="b">tcp_ptr__</span><span class="f">;</span>            \
<a name="58" /><span class="Maybe">      58:</span>     <a href="cpu.c_macros_ref.html#_X192ZXJpZnlfcGNwdV9wdHJfMA__"><span class="b">__verify_pcpu_ptr</span></a><span class="f">(</span><span class="b">ptr</span><span class="f">)</span><span class="f">;</span>                \
<a name="59" /><span class="Maybe">      59:</span>     <span class="m">asm</span> <span class="m">volatile</span><span class="f">(</span><span class="e">&quot;add &quot;</span> <a href="cpu.c_macros_ref.html#_X19wZXJjcHVfYXJnXzA_"><span class="b">__percpu_arg</span></a><span class="f">(</span><span class="c">1</span><span class="f">)</span> <span class="e">&quot;, %0&quot;</span>    \
<a name="60" /><span class="Maybe">      60:</span>              <span class="f">:</span> <span class="e">&quot;=r&quot;</span> <span class="f">(</span><span class="b">tcp_ptr__</span><span class="f">)</span>            \
<a name="61" /><span class="Maybe">      61:</span>              <span class="f">:</span> <span class="e">&quot;m&quot;</span> <span class="f">(</span><span class="b">this_cpu_off</span><span class="f">)</span><span class="f">,</span> <span class="e">&quot;0&quot;</span> <span class="f">(</span><span class="b">ptr</span><span class="f">)</span><span class="f">)</span><span class="f">;</span>    \
<a name="62" /><span class="Maybe">      62:</span>     <span class="f">(</span><span class="b">typeof</span><span class="f">(</span><span class="f">*</span><span class="f">(</span><span class="b">ptr</span><span class="f">)</span><span class="f">)</span> <a href="cpu.c_macros_ref.html#_X19rZXJuZWxfMA__"><span class="b">__kernel</span></a> <a href="cpu.c_macros_ref.html#_X19mb3JjZV8w"><span class="b">__force</span></a> <span class="f">*</span><span class="f">)</span><span class="b">tcp_ptr__</span><span class="f">;</span>    \
<a name="63" /><span class="Maybe">      63:</span> <span class="f">}</span><span class="f">)</span>
<a name="64" /><span class="False">      64:</span> <span class="f">#</span><span class="n">else</span>
<a name="65" /><span class="False">      65:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_X19wZXJjcHVfcHJlZml4XzA_"><span class="b">__percpu_prefix</span></a>        <span class="e">&quot;&quot;</span>
<a name="66" /><span class="Maybe">      66:</span> <span class="f">#</span><span class="n">endif</span>
<a name="67" /><span class="Maybe">      67:</span> 
<a name="68" /><span class="Maybe">      68:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_X19wZXJjcHVfYXJnXzA_"><span class="b">__percpu_arg</span></a><span class="f">(</span><span class="b">x</span><span class="f">)</span>        <a href="cpu.c_macros_ref.html#_X19wZXJjcHVfcHJlZml4XzA_"><span class="b">__percpu_prefix</span></a> <span class="e">&quot;%P&quot;</span> <span class="f">#</span><span class="b">x</span>
<a name="69" /><span class="Maybe">      69:</span> 
<a name="70" /><span class="Maybe">      70:</span> <span class="k">/*</span>
<a name="71" /><span class="Maybe">      71:</span> <span class="k"> * Initialized pointers to per-cpu variables needed for the boot</span>
<a name="72" /><span class="Maybe">      72:</span> <span class="k"> * processor need to use these macros to get the proper address</span>
<a name="73" /><span class="Maybe">      73:</span> <span class="k"> * offset from __per_cpu_load on SMP.</span>
<a name="74" /><span class="Maybe">      74:</span> <span class="k"> *</span>
<a name="75" /><span class="Maybe">      75:</span> <span class="k"> * There also must be an entry in vmlinux_64.lds.S</span>
<a name="76" /><span class="Maybe">      76:</span> <span class="k"> */</span>
<a name="77" /><span class="Maybe">      77:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_REVDTEFSRV9JTklUX1BFUl9DUFVfMA__"><span class="b">DECLARE_INIT_PER_CPU</span></a><span class="f">(</span><span class="b">var</span><span class="f">)</span> \
<a name="78" /><span class="Maybe">      78:</span>        <span class="m">extern</span> <span class="b">typeof</span><span class="f">(</span><span class="b">var</span><span class="f">)</span> <a href="cpu.c_macros_ref.html#_aW5pdF9wZXJfY3B1X3Zhcl8w"><span class="b">init_per_cpu_var</span></a><span class="f">(</span><span class="b">var</span><span class="f">)</span>
<a name="79" /><span class="Maybe">      79:</span> 
<a name="80" /><span class="Maybe">      80:</span> <span class="f">#</span><span class="n">ifdef</span> <a href="cpu.c_macros_ref.html#_Q09ORklHX1g4Nl82NF9TTVBfMA__"><span class="b">CONFIG_X86_64_SMP</span></a>
<a name="81" /><span class="Maybe">      81:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_aW5pdF9wZXJfY3B1X3Zhcl8w"><span class="b">init_per_cpu_var</span></a><span class="f">(</span><span class="b">var</span><span class="f">)</span>  <span class="b">init_per_cpu__</span><span class="f">##</span><span class="b">var</span>
<a name="82" /><span class="False">      82:</span> <span class="f">#</span><span class="n">else</span>
<a name="83" /><span class="False">      83:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_aW5pdF9wZXJfY3B1X3Zhcl8w"><span class="b">init_per_cpu_var</span></a><span class="f">(</span><span class="b">var</span><span class="f">)</span>  <span class="b">var</span>
<a name="84" /><span class="Maybe">      84:</span> <span class="f">#</span><span class="n">endif</span>
<a name="85" /><span class="Maybe">      85:</span> 
<a name="86" /><span class="Maybe">      86:</span> <span class="k">/* For arch-specific code, we can use direct single-insn ops (they</span>
<a name="87" /><span class="Maybe">      87:</span> <span class="k"> * don&apos;t give an lvalue though). */</span>
<a name="88" /><span class="Maybe">      88:</span> <span class="m">extern</span> <span class="m">void</span> <span class="b">__bad_percpu_size</span><span class="f">(</span><span class="m">void</span><span class="f">)</span><span class="f">;</span>
<a name="89" /><span class="Maybe">      89:</span> 
<a name="90" /><span class="Maybe">      90:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_cGVyY3B1X3RvX29wXzA_"><span class="b">percpu_to_op</span></a><span class="f">(</span><span class="b">op</span><span class="f">,</span> <span class="b">var</span><span class="f">,</span> <span class="b">val</span><span class="f">)</span>            \
<a name="91" /><span class="Maybe">      91:</span> <span class="m">do</span> <span class="f">{</span>                            \
<a name="92" /><span class="Maybe">      92:</span>     <span class="m">typedef</span> <span class="b">typeof</span><span class="f">(</span><span class="b">var</span><span class="f">)</span> <span class="b">pto_T__</span><span class="f">;</span>            \
<a name="93" /><span class="Maybe">      93:</span>     <span class="m">if</span> <span class="f">(</span><span class="c">0</span><span class="f">)</span> <span class="f">{</span>                    \
<a name="94" /><span class="Maybe">      94:</span>         <span class="b">pto_T__</span> <span class="b">pto_tmp__</span><span class="f">;</span>            \
<a name="95" /><span class="Maybe">      95:</span>         <span class="b">pto_tmp__</span> <span class="f">=</span> <span class="f">(</span><span class="b">val</span><span class="f">)</span><span class="f">;</span>            \
<a name="96" /><span class="Maybe">      96:</span>         <span class="f">(</span><span class="m">void</span><span class="f">)</span><span class="b">pto_tmp__</span><span class="f">;</span>            \
<a name="97" /><span class="Maybe">      97:</span>     <span class="f">}</span>                        \
<a name="98" /><span class="Maybe">      98:</span>     <span class="m">switch</span> <span class="f">(</span><span class="m">sizeof</span><span class="f">(</span><span class="b">var</span><span class="f">)</span><span class="f">)</span> <span class="f">{</span>                \
<a name="99" /><span class="Maybe">      99:</span>     <span class="m">case</span> <span class="c">1</span><span class="f">:</span>                        \
<a name="100" /><span class="Maybe">     100:</span>         <span class="m">asm</span><span class="f">(</span><span class="b">op</span> <span class="e">&quot;b %1,&quot;</span><a href="cpu.c_macros_ref.html#_X19wZXJjcHVfYXJnXzA_"><span class="b">__percpu_arg</span></a><span class="f">(</span><span class="c">0</span><span class="f">)</span>        \
<a name="101" /><span class="Maybe">     101:</span>             <span class="f">:</span> <span class="e">&quot;+m&quot;</span> <span class="f">(</span><span class="b">var</span><span class="f">)</span>            \
<a name="102" /><span class="Maybe">     102:</span>             <span class="f">:</span> <span class="e">&quot;qi&quot;</span> <span class="f">(</span><span class="f">(</span><span class="b">pto_T__</span><span class="f">)</span><span class="f">(</span><span class="b">val</span><span class="f">)</span><span class="f">)</span><span class="f">)</span><span class="f">;</span>        \
<a name="103" /><span class="Maybe">     103:</span>         <span class="m">break</span><span class="f">;</span>                    \
<a name="104" /><span class="Maybe">     104:</span>     <span class="m">case</span> <span class="c">2</span><span class="f">:</span>                        \
<a name="105" /><span class="Maybe">     105:</span>         <span class="m">asm</span><span class="f">(</span><span class="b">op</span> <span class="e">&quot;w %1,&quot;</span><a href="cpu.c_macros_ref.html#_X19wZXJjcHVfYXJnXzA_"><span class="b">__percpu_arg</span></a><span class="f">(</span><span class="c">0</span><span class="f">)</span>        \
<a name="106" /><span class="Maybe">     106:</span>             <span class="f">:</span> <span class="e">&quot;+m&quot;</span> <span class="f">(</span><span class="b">var</span><span class="f">)</span>            \
<a name="107" /><span class="Maybe">     107:</span>             <span class="f">:</span> <span class="e">&quot;ri&quot;</span> <span class="f">(</span><span class="f">(</span><span class="b">pto_T__</span><span class="f">)</span><span class="f">(</span><span class="b">val</span><span class="f">)</span><span class="f">)</span><span class="f">)</span><span class="f">;</span>        \
<a name="108" /><span class="Maybe">     108:</span>         <span class="m">break</span><span class="f">;</span>                    \
<a name="109" /><span class="Maybe">     109:</span>     <span class="m">case</span> <span class="c">4</span><span class="f">:</span>                        \
<a name="110" /><span class="Maybe">     110:</span>         <span class="m">asm</span><span class="f">(</span><span class="b">op</span> <span class="e">&quot;l %1,&quot;</span><a href="cpu.c_macros_ref.html#_X19wZXJjcHVfYXJnXzA_"><span class="b">__percpu_arg</span></a><span class="f">(</span><span class="c">0</span><span class="f">)</span>        \
<a name="111" /><span class="Maybe">     111:</span>             <span class="f">:</span> <span class="e">&quot;+m&quot;</span> <span class="f">(</span><span class="b">var</span><span class="f">)</span>            \
<a name="112" /><span class="Maybe">     112:</span>             <span class="f">:</span> <span class="e">&quot;ri&quot;</span> <span class="f">(</span><span class="f">(</span><span class="b">pto_T__</span><span class="f">)</span><span class="f">(</span><span class="b">val</span><span class="f">)</span><span class="f">)</span><span class="f">)</span><span class="f">;</span>        \
<a name="113" /><span class="Maybe">     113:</span>         <span class="m">break</span><span class="f">;</span>                    \
<a name="114" /><span class="Maybe">     114:</span>     <span class="m">case</span> <span class="c">8</span><span class="f">:</span>                        \
<a name="115" /><span class="Maybe">     115:</span>         <span class="m">asm</span><span class="f">(</span><span class="b">op</span> <span class="e">&quot;q %1,&quot;</span><a href="cpu.c_macros_ref.html#_X19wZXJjcHVfYXJnXzA_"><span class="b">__percpu_arg</span></a><span class="f">(</span><span class="c">0</span><span class="f">)</span>        \
<a name="116" /><span class="Maybe">     116:</span>             <span class="f">:</span> <span class="e">&quot;+m&quot;</span> <span class="f">(</span><span class="b">var</span><span class="f">)</span>            \
<a name="117" /><span class="Maybe">     117:</span>             <span class="f">:</span> <span class="e">&quot;re&quot;</span> <span class="f">(</span><span class="f">(</span><span class="b">pto_T__</span><span class="f">)</span><span class="f">(</span><span class="b">val</span><span class="f">)</span><span class="f">)</span><span class="f">)</span><span class="f">;</span>        \
<a name="118" /><span class="Maybe">     118:</span>         <span class="m">break</span><span class="f">;</span>                    \
<a name="119" /><span class="Maybe">     119:</span>     <span class="m">default</span><span class="f">:</span> <span class="b">__bad_percpu_size</span><span class="f">(</span><span class="f">)</span><span class="f">;</span>            \
<a name="120" /><span class="Maybe">     120:</span>     <span class="f">}</span>                        \
<a name="121" /><span class="Maybe">     121:</span> <span class="f">}</span> <span class="m">while</span> <span class="f">(</span><span class="c">0</span><span class="f">)</span>
<a name="122" /><span class="Maybe">     122:</span> 
<a name="123" /><span class="Maybe">     123:</span> <span class="k">/*</span>
<a name="124" /><span class="Maybe">     124:</span> <span class="k"> * Generate a percpu add to memory instruction and optimize code</span>
<a name="125" /><span class="Maybe">     125:</span> <span class="k"> * if one is added or subtracted.</span>
<a name="126" /><span class="Maybe">     126:</span> <span class="k"> */</span>
<a name="127" /><span class="Maybe">     127:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_cGVyY3B1X2FkZF9vcF8w"><span class="b">percpu_add_op</span></a><span class="f">(</span><span class="b">var</span><span class="f">,</span> <span class="b">val</span><span class="f">)</span>                        \
<a name="128" /><span class="Maybe">     128:</span> <span class="m">do</span> <span class="f">{</span>                                    \
<a name="129" /><span class="Maybe">     129:</span>     <span class="m">typedef</span> <span class="b">typeof</span><span class="f">(</span><span class="b">var</span><span class="f">)</span> <span class="b">pao_T__</span><span class="f">;</span>                    \
<a name="130" /><span class="Maybe">     130:</span>     <span class="m">const</span> <span class="m">int</span> <span class="b">pao_ID__</span> <span class="f">=</span> <span class="f">(</span><span class="b">__builtin_constant_p</span><span class="f">(</span><span class="b">val</span><span class="f">)</span> <span class="f">&amp;&amp;</span>        \
<a name="131" /><span class="Maybe">     131:</span>                   <span class="f">(</span><span class="f">(</span><span class="b">val</span><span class="f">)</span> <span class="f">==</span> <span class="c">1</span> <span class="f">||</span> <span class="f">(</span><span class="b">val</span><span class="f">)</span> <span class="f">==</span> <span class="f">-</span><span class="c">1</span><span class="f">)</span><span class="f">)</span> <span class="f">?</span>        \
<a name="132" /><span class="Maybe">     132:</span>                 <span class="f">(</span><span class="m">int</span><span class="f">)</span><span class="f">(</span><span class="b">val</span><span class="f">)</span> <span class="f">:</span> <span class="c">0</span><span class="f">;</span>                \
<a name="133" /><span class="Maybe">     133:</span>     <span class="m">if</span> <span class="f">(</span><span class="c">0</span><span class="f">)</span> <span class="f">{</span>                            \
<a name="134" /><span class="Maybe">     134:</span>         <span class="b">pao_T__</span> <span class="b">pao_tmp__</span><span class="f">;</span>                    \
<a name="135" /><span class="Maybe">     135:</span>         <span class="b">pao_tmp__</span> <span class="f">=</span> <span class="f">(</span><span class="b">val</span><span class="f">)</span><span class="f">;</span>                    \
<a name="136" /><span class="Maybe">     136:</span>         <span class="f">(</span><span class="m">void</span><span class="f">)</span><span class="b">pao_tmp__</span><span class="f">;</span>                    \
<a name="137" /><span class="Maybe">     137:</span>     <span class="f">}</span>                                \
<a name="138" /><span class="Maybe">     138:</span>     <span class="m">switch</span> <span class="f">(</span><span class="m">sizeof</span><span class="f">(</span><span class="b">var</span><span class="f">)</span><span class="f">)</span> <span class="f">{</span>                        \
<a name="139" /><span class="Maybe">     139:</span>     <span class="m">case</span> <span class="c">1</span><span class="f">:</span>                                \
<a name="140" /><span class="Maybe">     140:</span>         <span class="m">if</span> <span class="f">(</span><span class="b">pao_ID__</span> <span class="f">==</span> <span class="c">1</span><span class="f">)</span>                    \
<a name="141" /><span class="Maybe">     141:</span>             <span class="m">asm</span><span class="f">(</span><span class="e">&quot;incb &quot;</span><a href="cpu.c_macros_ref.html#_X19wZXJjcHVfYXJnXzA_"><span class="b">__percpu_arg</span></a><span class="f">(</span><span class="c">0</span><span class="f">)</span> <span class="f">:</span> <span class="e">&quot;+m&quot;</span> <span class="f">(</span><span class="b">var</span><span class="f">)</span><span class="f">)</span><span class="f">;</span>    \
<a name="142" /><span class="Maybe">     142:</span>         <span class="m">else</span> <span class="m">if</span> <span class="f">(</span><span class="b">pao_ID__</span> <span class="f">==</span> <span class="f">-</span><span class="c">1</span><span class="f">)</span>                \
<a name="143" /><span class="Maybe">     143:</span>             <span class="m">asm</span><span class="f">(</span><span class="e">&quot;decb &quot;</span><a href="cpu.c_macros_ref.html#_X19wZXJjcHVfYXJnXzA_"><span class="b">__percpu_arg</span></a><span class="f">(</span><span class="c">0</span><span class="f">)</span> <span class="f">:</span> <span class="e">&quot;+m&quot;</span> <span class="f">(</span><span class="b">var</span><span class="f">)</span><span class="f">)</span><span class="f">;</span>    \
<a name="144" /><span class="Maybe">     144:</span>         <span class="m">else</span>                            \
<a name="145" /><span class="Maybe">     145:</span>             <span class="m">asm</span><span class="f">(</span><span class="e">&quot;addb %1, &quot;</span><a href="cpu.c_macros_ref.html#_X19wZXJjcHVfYXJnXzA_"><span class="b">__percpu_arg</span></a><span class="f">(</span><span class="c">0</span><span class="f">)</span>            \
<a name="146" /><span class="Maybe">     146:</span>                 <span class="f">:</span> <span class="e">&quot;+m&quot;</span> <span class="f">(</span><span class="b">var</span><span class="f">)</span>                \
<a name="147" /><span class="Maybe">     147:</span>                 <span class="f">:</span> <span class="e">&quot;qi&quot;</span> <span class="f">(</span><span class="f">(</span><span class="b">pao_T__</span><span class="f">)</span><span class="f">(</span><span class="b">val</span><span class="f">)</span><span class="f">)</span><span class="f">)</span><span class="f">;</span>            \
<a name="148" /><span class="Maybe">     148:</span>         <span class="m">break</span><span class="f">;</span>                            \
<a name="149" /><span class="Maybe">     149:</span>     <span class="m">case</span> <span class="c">2</span><span class="f">:</span>                                \
<a name="150" /><span class="Maybe">     150:</span>         <span class="m">if</span> <span class="f">(</span><span class="b">pao_ID__</span> <span class="f">==</span> <span class="c">1</span><span class="f">)</span>                    \
<a name="151" /><span class="Maybe">     151:</span>             <span class="m">asm</span><span class="f">(</span><span class="e">&quot;incw &quot;</span><a href="cpu.c_macros_ref.html#_X19wZXJjcHVfYXJnXzA_"><span class="b">__percpu_arg</span></a><span class="f">(</span><span class="c">0</span><span class="f">)</span> <span class="f">:</span> <span class="e">&quot;+m&quot;</span> <span class="f">(</span><span class="b">var</span><span class="f">)</span><span class="f">)</span><span class="f">;</span>    \
<a name="152" /><span class="Maybe">     152:</span>         <span class="m">else</span> <span class="m">if</span> <span class="f">(</span><span class="b">pao_ID__</span> <span class="f">==</span> <span class="f">-</span><span class="c">1</span><span class="f">)</span>                \
<a name="153" /><span class="Maybe">     153:</span>             <span class="m">asm</span><span class="f">(</span><span class="e">&quot;decw &quot;</span><a href="cpu.c_macros_ref.html#_X19wZXJjcHVfYXJnXzA_"><span class="b">__percpu_arg</span></a><span class="f">(</span><span class="c">0</span><span class="f">)</span> <span class="f">:</span> <span class="e">&quot;+m&quot;</span> <span class="f">(</span><span class="b">var</span><span class="f">)</span><span class="f">)</span><span class="f">;</span>    \
<a name="154" /><span class="Maybe">     154:</span>         <span class="m">else</span>                            \
<a name="155" /><span class="Maybe">     155:</span>             <span class="m">asm</span><span class="f">(</span><span class="e">&quot;addw %1, &quot;</span><a href="cpu.c_macros_ref.html#_X19wZXJjcHVfYXJnXzA_"><span class="b">__percpu_arg</span></a><span class="f">(</span><span class="c">0</span><span class="f">)</span>            \
<a name="156" /><span class="Maybe">     156:</span>                 <span class="f">:</span> <span class="e">&quot;+m&quot;</span> <span class="f">(</span><span class="b">var</span><span class="f">)</span>                \
<a name="157" /><span class="Maybe">     157:</span>                 <span class="f">:</span> <span class="e">&quot;ri&quot;</span> <span class="f">(</span><span class="f">(</span><span class="b">pao_T__</span><span class="f">)</span><span class="f">(</span><span class="b">val</span><span class="f">)</span><span class="f">)</span><span class="f">)</span><span class="f">;</span>            \
<a name="158" /><span class="Maybe">     158:</span>         <span class="m">break</span><span class="f">;</span>                            \
<a name="159" /><span class="Maybe">     159:</span>     <span class="m">case</span> <span class="c">4</span><span class="f">:</span>                                \
<a name="160" /><span class="Maybe">     160:</span>         <span class="m">if</span> <span class="f">(</span><span class="b">pao_ID__</span> <span class="f">==</span> <span class="c">1</span><span class="f">)</span>                    \
<a name="161" /><span class="Maybe">     161:</span>             <span class="m">asm</span><span class="f">(</span><span class="e">&quot;incl &quot;</span><a href="cpu.c_macros_ref.html#_X19wZXJjcHVfYXJnXzA_"><span class="b">__percpu_arg</span></a><span class="f">(</span><span class="c">0</span><span class="f">)</span> <span class="f">:</span> <span class="e">&quot;+m&quot;</span> <span class="f">(</span><span class="b">var</span><span class="f">)</span><span class="f">)</span><span class="f">;</span>    \
<a name="162" /><span class="Maybe">     162:</span>         <span class="m">else</span> <span class="m">if</span> <span class="f">(</span><span class="b">pao_ID__</span> <span class="f">==</span> <span class="f">-</span><span class="c">1</span><span class="f">)</span>                \
<a name="163" /><span class="Maybe">     163:</span>             <span class="m">asm</span><span class="f">(</span><span class="e">&quot;decl &quot;</span><a href="cpu.c_macros_ref.html#_X19wZXJjcHVfYXJnXzA_"><span class="b">__percpu_arg</span></a><span class="f">(</span><span class="c">0</span><span class="f">)</span> <span class="f">:</span> <span class="e">&quot;+m&quot;</span> <span class="f">(</span><span class="b">var</span><span class="f">)</span><span class="f">)</span><span class="f">;</span>    \
<a name="164" /><span class="Maybe">     164:</span>         <span class="m">else</span>                            \
<a name="165" /><span class="Maybe">     165:</span>             <span class="m">asm</span><span class="f">(</span><span class="e">&quot;addl %1, &quot;</span><a href="cpu.c_macros_ref.html#_X19wZXJjcHVfYXJnXzA_"><span class="b">__percpu_arg</span></a><span class="f">(</span><span class="c">0</span><span class="f">)</span>            \
<a name="166" /><span class="Maybe">     166:</span>                 <span class="f">:</span> <span class="e">&quot;+m&quot;</span> <span class="f">(</span><span class="b">var</span><span class="f">)</span>                \
<a name="167" /><span class="Maybe">     167:</span>                 <span class="f">:</span> <span class="e">&quot;ri&quot;</span> <span class="f">(</span><span class="f">(</span><span class="b">pao_T__</span><span class="f">)</span><span class="f">(</span><span class="b">val</span><span class="f">)</span><span class="f">)</span><span class="f">)</span><span class="f">;</span>            \
<a name="168" /><span class="Maybe">     168:</span>         <span class="m">break</span><span class="f">;</span>                            \
<a name="169" /><span class="Maybe">     169:</span>     <span class="m">case</span> <span class="c">8</span><span class="f">:</span>                                \
<a name="170" /><span class="Maybe">     170:</span>         <span class="m">if</span> <span class="f">(</span><span class="b">pao_ID__</span> <span class="f">==</span> <span class="c">1</span><span class="f">)</span>                    \
<a name="171" /><span class="Maybe">     171:</span>             <span class="m">asm</span><span class="f">(</span><span class="e">&quot;incq &quot;</span><a href="cpu.c_macros_ref.html#_X19wZXJjcHVfYXJnXzA_"><span class="b">__percpu_arg</span></a><span class="f">(</span><span class="c">0</span><span class="f">)</span> <span class="f">:</span> <span class="e">&quot;+m&quot;</span> <span class="f">(</span><span class="b">var</span><span class="f">)</span><span class="f">)</span><span class="f">;</span>    \
<a name="172" /><span class="Maybe">     172:</span>         <span class="m">else</span> <span class="m">if</span> <span class="f">(</span><span class="b">pao_ID__</span> <span class="f">==</span> <span class="f">-</span><span class="c">1</span><span class="f">)</span>                \
<a name="173" /><span class="Maybe">     173:</span>             <span class="m">asm</span><span class="f">(</span><span class="e">&quot;decq &quot;</span><a href="cpu.c_macros_ref.html#_X19wZXJjcHVfYXJnXzA_"><span class="b">__percpu_arg</span></a><span class="f">(</span><span class="c">0</span><span class="f">)</span> <span class="f">:</span> <span class="e">&quot;+m&quot;</span> <span class="f">(</span><span class="b">var</span><span class="f">)</span><span class="f">)</span><span class="f">;</span>    \
<a name="174" /><span class="Maybe">     174:</span>         <span class="m">else</span>                            \
<a name="175" /><span class="Maybe">     175:</span>             <span class="m">asm</span><span class="f">(</span><span class="e">&quot;addq %1, &quot;</span><a href="cpu.c_macros_ref.html#_X19wZXJjcHVfYXJnXzA_"><span class="b">__percpu_arg</span></a><span class="f">(</span><span class="c">0</span><span class="f">)</span>            \
<a name="176" /><span class="Maybe">     176:</span>                 <span class="f">:</span> <span class="e">&quot;+m&quot;</span> <span class="f">(</span><span class="b">var</span><span class="f">)</span>                \
<a name="177" /><span class="Maybe">     177:</span>                 <span class="f">:</span> <span class="e">&quot;re&quot;</span> <span class="f">(</span><span class="f">(</span><span class="b">pao_T__</span><span class="f">)</span><span class="f">(</span><span class="b">val</span><span class="f">)</span><span class="f">)</span><span class="f">)</span><span class="f">;</span>            \
<a name="178" /><span class="Maybe">     178:</span>         <span class="m">break</span><span class="f">;</span>                            \
<a name="179" /><span class="Maybe">     179:</span>     <span class="m">default</span><span class="f">:</span> <span class="b">__bad_percpu_size</span><span class="f">(</span><span class="f">)</span><span class="f">;</span>                    \
<a name="180" /><span class="Maybe">     180:</span>     <span class="f">}</span>                                \
<a name="181" /><span class="Maybe">     181:</span> <span class="f">}</span> <span class="m">while</span> <span class="f">(</span><span class="c">0</span><span class="f">)</span>
<a name="182" /><span class="Maybe">     182:</span> 
<a name="183" /><span class="Maybe">     183:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_cGVyY3B1X2Zyb21fb3BfMA__"><span class="b">percpu_from_op</span></a><span class="f">(</span><span class="b">op</span><span class="f">,</span> <span class="b">var</span><span class="f">,</span> <span class="b">constraint</span><span class="f">)</span>        \
<a name="184" /><span class="Maybe">     184:</span> <span class="f">(</span><span class="f">{</span>                            \
<a name="185" /><span class="Maybe">     185:</span>     <span class="b">typeof</span><span class="f">(</span><span class="b">var</span><span class="f">)</span> <span class="b">pfo_ret__</span><span class="f">;</span>                \
<a name="186" /><span class="Maybe">     186:</span>     <span class="m">switch</span> <span class="f">(</span><span class="m">sizeof</span><span class="f">(</span><span class="b">var</span><span class="f">)</span><span class="f">)</span> <span class="f">{</span>                \
<a name="187" /><span class="Maybe">     187:</span>     <span class="m">case</span> <span class="c">1</span><span class="f">:</span>                        \
<a name="188" /><span class="Maybe">     188:</span>         <span class="m">asm</span><span class="f">(</span><span class="b">op</span> <span class="e">&quot;b &quot;</span><a href="cpu.c_macros_ref.html#_X19wZXJjcHVfYXJnXzA_"><span class="b">__percpu_arg</span></a><span class="f">(</span><span class="c">1</span><span class="f">)</span><span class="e">&quot;,%0&quot;</span>        \
<a name="189" /><span class="Maybe">     189:</span>             <span class="f">:</span> <span class="e">&quot;=q&quot;</span> <span class="f">(</span><span class="b">pfo_ret__</span><span class="f">)</span>            \
<a name="190" /><span class="Maybe">     190:</span>             <span class="f">:</span> <span class="b">constraint</span><span class="f">)</span><span class="f">;</span>            \
<a name="191" /><span class="Maybe">     191:</span>         <span class="m">break</span><span class="f">;</span>                    \
<a name="192" /><span class="Maybe">     192:</span>     <span class="m">case</span> <span class="c">2</span><span class="f">:</span>                        \
<a name="193" /><span class="Maybe">     193:</span>         <span class="m">asm</span><span class="f">(</span><span class="b">op</span> <span class="e">&quot;w &quot;</span><a href="cpu.c_macros_ref.html#_X19wZXJjcHVfYXJnXzA_"><span class="b">__percpu_arg</span></a><span class="f">(</span><span class="c">1</span><span class="f">)</span><span class="e">&quot;,%0&quot;</span>        \
<a name="194" /><span class="Maybe">     194:</span>             <span class="f">:</span> <span class="e">&quot;=r&quot;</span> <span class="f">(</span><span class="b">pfo_ret__</span><span class="f">)</span>            \
<a name="195" /><span class="Maybe">     195:</span>             <span class="f">:</span> <span class="b">constraint</span><span class="f">)</span><span class="f">;</span>            \
<a name="196" /><span class="Maybe">     196:</span>         <span class="m">break</span><span class="f">;</span>                    \
<a name="197" /><span class="Maybe">     197:</span>     <span class="m">case</span> <span class="c">4</span><span class="f">:</span>                        \
<a name="198" /><span class="Maybe">     198:</span>         <span class="m">asm</span><span class="f">(</span><span class="b">op</span> <span class="e">&quot;l &quot;</span><a href="cpu.c_macros_ref.html#_X19wZXJjcHVfYXJnXzA_"><span class="b">__percpu_arg</span></a><span class="f">(</span><span class="c">1</span><span class="f">)</span><span class="e">&quot;,%0&quot;</span>        \
<a name="199" /><span class="Maybe">     199:</span>             <span class="f">:</span> <span class="e">&quot;=r&quot;</span> <span class="f">(</span><span class="b">pfo_ret__</span><span class="f">)</span>            \
<a name="200" /><span class="Maybe">     200:</span>             <span class="f">:</span> <span class="b">constraint</span><span class="f">)</span><span class="f">;</span>            \
<a name="201" /><span class="Maybe">     201:</span>         <span class="m">break</span><span class="f">;</span>                    \
<a name="202" /><span class="Maybe">     202:</span>     <span class="m">case</span> <span class="c">8</span><span class="f">:</span>                        \
<a name="203" /><span class="Maybe">     203:</span>         <span class="m">asm</span><span class="f">(</span><span class="b">op</span> <span class="e">&quot;q &quot;</span><a href="cpu.c_macros_ref.html#_X19wZXJjcHVfYXJnXzA_"><span class="b">__percpu_arg</span></a><span class="f">(</span><span class="c">1</span><span class="f">)</span><span class="e">&quot;,%0&quot;</span>        \
<a name="204" /><span class="Maybe">     204:</span>             <span class="f">:</span> <span class="e">&quot;=r&quot;</span> <span class="f">(</span><span class="b">pfo_ret__</span><span class="f">)</span>            \
<a name="205" /><span class="Maybe">     205:</span>             <span class="f">:</span> <span class="b">constraint</span><span class="f">)</span><span class="f">;</span>            \
<a name="206" /><span class="Maybe">     206:</span>         <span class="m">break</span><span class="f">;</span>                    \
<a name="207" /><span class="Maybe">     207:</span>     <span class="m">default</span><span class="f">:</span> <span class="b">__bad_percpu_size</span><span class="f">(</span><span class="f">)</span><span class="f">;</span>            \
<a name="208" /><span class="Maybe">     208:</span>     <span class="f">}</span>                        \
<a name="209" /><span class="Maybe">     209:</span>     <span class="b">pfo_ret__</span><span class="f">;</span>                    \
<a name="210" /><span class="Maybe">     210:</span> <span class="f">}</span><span class="f">)</span>
<a name="211" /><span class="Maybe">     211:</span> 
<a name="212" /><span class="Maybe">     212:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_cGVyY3B1X3VuYXJ5X29wXzA_"><span class="b">percpu_unary_op</span></a><span class="f">(</span><span class="b">op</span><span class="f">,</span> <span class="b">var</span><span class="f">)</span>            \
<a name="213" /><span class="Maybe">     213:</span> <span class="f">(</span><span class="f">{</span>                            \
<a name="214" /><span class="Maybe">     214:</span>     <span class="m">switch</span> <span class="f">(</span><span class="m">sizeof</span><span class="f">(</span><span class="b">var</span><span class="f">)</span><span class="f">)</span> <span class="f">{</span>                \
<a name="215" /><span class="Maybe">     215:</span>     <span class="m">case</span> <span class="c">1</span><span class="f">:</span>                        \
<a name="216" /><span class="Maybe">     216:</span>         <span class="m">asm</span><span class="f">(</span><span class="b">op</span> <span class="e">&quot;b &quot;</span><a href="cpu.c_macros_ref.html#_X19wZXJjcHVfYXJnXzA_"><span class="b">__percpu_arg</span></a><span class="f">(</span><span class="c">0</span><span class="f">)</span>        \
<a name="217" /><span class="Maybe">     217:</span>             <span class="f">:</span> <span class="e">&quot;+m&quot;</span> <span class="f">(</span><span class="b">var</span><span class="f">)</span><span class="f">)</span><span class="f">;</span>            \
<a name="218" /><span class="Maybe">     218:</span>         <span class="m">break</span><span class="f">;</span>                    \
<a name="219" /><span class="Maybe">     219:</span>     <span class="m">case</span> <span class="c">2</span><span class="f">:</span>                        \
<a name="220" /><span class="Maybe">     220:</span>         <span class="m">asm</span><span class="f">(</span><span class="b">op</span> <span class="e">&quot;w &quot;</span><a href="cpu.c_macros_ref.html#_X19wZXJjcHVfYXJnXzA_"><span class="b">__percpu_arg</span></a><span class="f">(</span><span class="c">0</span><span class="f">)</span>        \
<a name="221" /><span class="Maybe">     221:</span>             <span class="f">:</span> <span class="e">&quot;+m&quot;</span> <span class="f">(</span><span class="b">var</span><span class="f">)</span><span class="f">)</span><span class="f">;</span>            \
<a name="222" /><span class="Maybe">     222:</span>         <span class="m">break</span><span class="f">;</span>                    \
<a name="223" /><span class="Maybe">     223:</span>     <span class="m">case</span> <span class="c">4</span><span class="f">:</span>                        \
<a name="224" /><span class="Maybe">     224:</span>         <span class="m">asm</span><span class="f">(</span><span class="b">op</span> <span class="e">&quot;l &quot;</span><a href="cpu.c_macros_ref.html#_X19wZXJjcHVfYXJnXzA_"><span class="b">__percpu_arg</span></a><span class="f">(</span><span class="c">0</span><span class="f">)</span>        \
<a name="225" /><span class="Maybe">     225:</span>             <span class="f">:</span> <span class="e">&quot;+m&quot;</span> <span class="f">(</span><span class="b">var</span><span class="f">)</span><span class="f">)</span><span class="f">;</span>            \
<a name="226" /><span class="Maybe">     226:</span>         <span class="m">break</span><span class="f">;</span>                    \
<a name="227" /><span class="Maybe">     227:</span>     <span class="m">case</span> <span class="c">8</span><span class="f">:</span>                        \
<a name="228" /><span class="Maybe">     228:</span>         <span class="m">asm</span><span class="f">(</span><span class="b">op</span> <span class="e">&quot;q &quot;</span><a href="cpu.c_macros_ref.html#_X19wZXJjcHVfYXJnXzA_"><span class="b">__percpu_arg</span></a><span class="f">(</span><span class="c">0</span><span class="f">)</span>        \
<a name="229" /><span class="Maybe">     229:</span>             <span class="f">:</span> <span class="e">&quot;+m&quot;</span> <span class="f">(</span><span class="b">var</span><span class="f">)</span><span class="f">)</span><span class="f">;</span>            \
<a name="230" /><span class="Maybe">     230:</span>         <span class="m">break</span><span class="f">;</span>                    \
<a name="231" /><span class="Maybe">     231:</span>     <span class="m">default</span><span class="f">:</span> <span class="b">__bad_percpu_size</span><span class="f">(</span><span class="f">)</span><span class="f">;</span>            \
<a name="232" /><span class="Maybe">     232:</span>     <span class="f">}</span>                        \
<a name="233" /><span class="Maybe">     233:</span> <span class="f">}</span><span class="f">)</span>
<a name="234" /><span class="Maybe">     234:</span> 
<a name="235" /><span class="Maybe">     235:</span> <span class="k">/*</span>
<a name="236" /><span class="Maybe">     236:</span> <span class="k"> * Add return operation</span>
<a name="237" /><span class="Maybe">     237:</span> <span class="k"> */</span>
<a name="238" /><span class="Maybe">     238:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_cGVyY3B1X2FkZF9yZXR1cm5fb3BfMA__"><span class="b">percpu_add_return_op</span></a><span class="f">(</span><span class="b">var</span><span class="f">,</span> <span class="b">val</span><span class="f">)</span>                    \
<a name="239" /><span class="Maybe">     239:</span> <span class="f">(</span><span class="f">{</span>                                    \
<a name="240" /><span class="Maybe">     240:</span>     <span class="b">typeof</span><span class="f">(</span><span class="b">var</span><span class="f">)</span> <span class="b">paro_ret__</span> <span class="f">=</span> <span class="b">val</span><span class="f">;</span>                    \
<a name="241" /><span class="Maybe">     241:</span>     <span class="m">switch</span> <span class="f">(</span><span class="m">sizeof</span><span class="f">(</span><span class="b">var</span><span class="f">)</span><span class="f">)</span> <span class="f">{</span>                        \
<a name="242" /><span class="Maybe">     242:</span>     <span class="m">case</span> <span class="c">1</span><span class="f">:</span>                                \
<a name="243" /><span class="Maybe">     243:</span>         <span class="m">asm</span><span class="f">(</span><span class="e">&quot;xaddb %0, &quot;</span><a href="cpu.c_macros_ref.html#_X19wZXJjcHVfYXJnXzA_"><span class="b">__percpu_arg</span></a><span class="f">(</span><span class="c">1</span><span class="f">)</span>                \
<a name="244" /><span class="Maybe">     244:</span>                 <span class="f">:</span> <span class="e">&quot;+q&quot;</span> <span class="f">(</span><span class="b">paro_ret__</span><span class="f">)</span><span class="f">,</span> <span class="e">&quot;+m&quot;</span> <span class="f">(</span><span class="b">var</span><span class="f">)</span>        \
<a name="245" /><span class="Maybe">     245:</span>                 <span class="f">:</span> <span class="f">:</span> <span class="e">&quot;memory&quot;</span><span class="f">)</span><span class="f">;</span>                \
<a name="246" /><span class="Maybe">     246:</span>         <span class="m">break</span><span class="f">;</span>                            \
<a name="247" /><span class="Maybe">     247:</span>     <span class="m">case</span> <span class="c">2</span><span class="f">:</span>                                \
<a name="248" /><span class="Maybe">     248:</span>         <span class="m">asm</span><span class="f">(</span><span class="e">&quot;xaddw %0, &quot;</span><a href="cpu.c_macros_ref.html#_X19wZXJjcHVfYXJnXzA_"><span class="b">__percpu_arg</span></a><span class="f">(</span><span class="c">1</span><span class="f">)</span>                \
<a name="249" /><span class="Maybe">     249:</span>                 <span class="f">:</span> <span class="e">&quot;+r&quot;</span> <span class="f">(</span><span class="b">paro_ret__</span><span class="f">)</span><span class="f">,</span> <span class="e">&quot;+m&quot;</span> <span class="f">(</span><span class="b">var</span><span class="f">)</span>        \
<a name="250" /><span class="Maybe">     250:</span>                 <span class="f">:</span> <span class="f">:</span> <span class="e">&quot;memory&quot;</span><span class="f">)</span><span class="f">;</span>                \
<a name="251" /><span class="Maybe">     251:</span>         <span class="m">break</span><span class="f">;</span>                            \
<a name="252" /><span class="Maybe">     252:</span>     <span class="m">case</span> <span class="c">4</span><span class="f">:</span>                                \
<a name="253" /><span class="Maybe">     253:</span>         <span class="m">asm</span><span class="f">(</span><span class="e">&quot;xaddl %0, &quot;</span><a href="cpu.c_macros_ref.html#_X19wZXJjcHVfYXJnXzA_"><span class="b">__percpu_arg</span></a><span class="f">(</span><span class="c">1</span><span class="f">)</span>                \
<a name="254" /><span class="Maybe">     254:</span>                 <span class="f">:</span> <span class="e">&quot;+r&quot;</span> <span class="f">(</span><span class="b">paro_ret__</span><span class="f">)</span><span class="f">,</span> <span class="e">&quot;+m&quot;</span> <span class="f">(</span><span class="b">var</span><span class="f">)</span>        \
<a name="255" /><span class="Maybe">     255:</span>                 <span class="f">:</span> <span class="f">:</span> <span class="e">&quot;memory&quot;</span><span class="f">)</span><span class="f">;</span>                \
<a name="256" /><span class="Maybe">     256:</span>         <span class="m">break</span><span class="f">;</span>                            \
<a name="257" /><span class="Maybe">     257:</span>     <span class="m">case</span> <span class="c">8</span><span class="f">:</span>                                \
<a name="258" /><span class="Maybe">     258:</span>         <span class="m">asm</span><span class="f">(</span><span class="e">&quot;xaddq %0, &quot;</span><a href="cpu.c_macros_ref.html#_X19wZXJjcHVfYXJnXzA_"><span class="b">__percpu_arg</span></a><span class="f">(</span><span class="c">1</span><span class="f">)</span>                \
<a name="259" /><span class="Maybe">     259:</span>                 <span class="f">:</span> <span class="e">&quot;+re&quot;</span> <span class="f">(</span><span class="b">paro_ret__</span><span class="f">)</span><span class="f">,</span> <span class="e">&quot;+m&quot;</span> <span class="f">(</span><span class="b">var</span><span class="f">)</span>        \
<a name="260" /><span class="Maybe">     260:</span>                 <span class="f">:</span> <span class="f">:</span> <span class="e">&quot;memory&quot;</span><span class="f">)</span><span class="f">;</span>                \
<a name="261" /><span class="Maybe">     261:</span>         <span class="m">break</span><span class="f">;</span>                            \
<a name="262" /><span class="Maybe">     262:</span>     <span class="m">default</span><span class="f">:</span> <span class="b">__bad_percpu_size</span><span class="f">(</span><span class="f">)</span><span class="f">;</span>                    \
<a name="263" /><span class="Maybe">     263:</span>     <span class="f">}</span>                                \
<a name="264" /><span class="Maybe">     264:</span>     <span class="b">paro_ret__</span> <span class="f">+=</span> <span class="b">val</span><span class="f">;</span>                        \
<a name="265" /><span class="Maybe">     265:</span>     <span class="b">paro_ret__</span><span class="f">;</span>                            \
<a name="266" /><span class="Maybe">     266:</span> <span class="f">}</span><span class="f">)</span>
<a name="267" /><span class="Maybe">     267:</span> 
<a name="268" /><span class="Maybe">     268:</span> <span class="k">/*</span>
<a name="269" /><span class="Maybe">     269:</span> <span class="k"> * xchg is implemented using cmpxchg without a lock prefix. xchg is</span>
<a name="270" /><span class="Maybe">     270:</span> <span class="k"> * expensive due to the implied lock prefix.  The processor cannot prefetch</span>
<a name="271" /><span class="Maybe">     271:</span> <span class="k"> * cachelines if xchg is used.</span>
<a name="272" /><span class="Maybe">     272:</span> <span class="k"> */</span>
<a name="273" /><span class="Maybe">     273:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_cGVyY3B1X3hjaGdfb3BfMA__"><span class="b">percpu_xchg_op</span></a><span class="f">(</span><span class="b">var</span><span class="f">,</span> <span class="b">nval</span><span class="f">)</span>                    \
<a name="274" /><span class="Maybe">     274:</span> <span class="f">(</span><span class="f">{</span>                                    \
<a name="275" /><span class="Maybe">     275:</span>     <span class="b">typeof</span><span class="f">(</span><span class="b">var</span><span class="f">)</span> <span class="b">pxo_ret__</span><span class="f">;</span>                        \
<a name="276" /><span class="Maybe">     276:</span>     <span class="b">typeof</span><span class="f">(</span><span class="b">var</span><span class="f">)</span> <span class="b">pxo_new__</span> <span class="f">=</span> <span class="f">(</span><span class="b">nval</span><span class="f">)</span><span class="f">;</span>                    \
<a name="277" /><span class="Maybe">     277:</span>     <span class="m">switch</span> <span class="f">(</span><span class="m">sizeof</span><span class="f">(</span><span class="b">var</span><span class="f">)</span><span class="f">)</span> <span class="f">{</span>                        \
<a name="278" /><span class="Maybe">     278:</span>     <span class="m">case</span> <span class="c">1</span><span class="f">:</span>                                \
<a name="279" /><span class="Maybe">     279:</span>         <span class="m">asm</span><span class="f">(</span><span class="e">&quot;\n\tmov &quot;</span><a href="cpu.c_macros_ref.html#_X19wZXJjcHVfYXJnXzA_"><span class="b">__percpu_arg</span></a><span class="f">(</span><span class="c">1</span><span class="f">)</span><span class="e">&quot;,%%al&quot;</span>            \
<a name="280" /><span class="Maybe">     280:</span>             <span class="e">&quot;\n1:\tcmpxchgb %2, &quot;</span><a href="cpu.c_macros_ref.html#_X19wZXJjcHVfYXJnXzA_"><span class="b">__percpu_arg</span></a><span class="f">(</span><span class="c">1</span><span class="f">)</span>        \
<a name="281" /><span class="Maybe">     281:</span>             <span class="e">&quot;\n\tjnz 1b&quot;</span>                    \
<a name="282" /><span class="Maybe">     282:</span>                 <span class="f">:</span> <span class="e">&quot;=&amp;a&quot;</span> <span class="f">(</span><span class="b">pxo_ret__</span><span class="f">)</span><span class="f">,</span> <span class="e">&quot;+m&quot;</span> <span class="f">(</span><span class="b">var</span><span class="f">)</span>        \
<a name="283" /><span class="Maybe">     283:</span>                 <span class="f">:</span> <span class="e">&quot;q&quot;</span> <span class="f">(</span><span class="b">pxo_new__</span><span class="f">)</span>                \
<a name="284" /><span class="Maybe">     284:</span>                 <span class="f">:</span> <span class="e">&quot;memory&quot;</span><span class="f">)</span><span class="f">;</span>                \
<a name="285" /><span class="Maybe">     285:</span>         <span class="m">break</span><span class="f">;</span>                            \
<a name="286" /><span class="Maybe">     286:</span>     <span class="m">case</span> <span class="c">2</span><span class="f">:</span>                                \
<a name="287" /><span class="Maybe">     287:</span>         <span class="m">asm</span><span class="f">(</span><span class="e">&quot;\n\tmov &quot;</span><a href="cpu.c_macros_ref.html#_X19wZXJjcHVfYXJnXzA_"><span class="b">__percpu_arg</span></a><span class="f">(</span><span class="c">1</span><span class="f">)</span><span class="e">&quot;,%%ax&quot;</span>            \
<a name="288" /><span class="Maybe">     288:</span>             <span class="e">&quot;\n1:\tcmpxchgw %2, &quot;</span><a href="cpu.c_macros_ref.html#_X19wZXJjcHVfYXJnXzA_"><span class="b">__percpu_arg</span></a><span class="f">(</span><span class="c">1</span><span class="f">)</span>        \
<a name="289" /><span class="Maybe">     289:</span>             <span class="e">&quot;\n\tjnz 1b&quot;</span>                    \
<a name="290" /><span class="Maybe">     290:</span>                 <span class="f">:</span> <span class="e">&quot;=&amp;a&quot;</span> <span class="f">(</span><span class="b">pxo_ret__</span><span class="f">)</span><span class="f">,</span> <span class="e">&quot;+m&quot;</span> <span class="f">(</span><span class="b">var</span><span class="f">)</span>        \
<a name="291" /><span class="Maybe">     291:</span>                 <span class="f">:</span> <span class="e">&quot;r&quot;</span> <span class="f">(</span><span class="b">pxo_new__</span><span class="f">)</span>                \
<a name="292" /><span class="Maybe">     292:</span>                 <span class="f">:</span> <span class="e">&quot;memory&quot;</span><span class="f">)</span><span class="f">;</span>                \
<a name="293" /><span class="Maybe">     293:</span>         <span class="m">break</span><span class="f">;</span>                            \
<a name="294" /><span class="Maybe">     294:</span>     <span class="m">case</span> <span class="c">4</span><span class="f">:</span>                                \
<a name="295" /><span class="Maybe">     295:</span>         <span class="m">asm</span><span class="f">(</span><span class="e">&quot;\n\tmov &quot;</span><a href="cpu.c_macros_ref.html#_X19wZXJjcHVfYXJnXzA_"><span class="b">__percpu_arg</span></a><span class="f">(</span><span class="c">1</span><span class="f">)</span><span class="e">&quot;,%%eax&quot;</span>            \
<a name="296" /><span class="Maybe">     296:</span>             <span class="e">&quot;\n1:\tcmpxchgl %2, &quot;</span><a href="cpu.c_macros_ref.html#_X19wZXJjcHVfYXJnXzA_"><span class="b">__percpu_arg</span></a><span class="f">(</span><span class="c">1</span><span class="f">)</span>        \
<a name="297" /><span class="Maybe">     297:</span>             <span class="e">&quot;\n\tjnz 1b&quot;</span>                    \
<a name="298" /><span class="Maybe">     298:</span>                 <span class="f">:</span> <span class="e">&quot;=&amp;a&quot;</span> <span class="f">(</span><span class="b">pxo_ret__</span><span class="f">)</span><span class="f">,</span> <span class="e">&quot;+m&quot;</span> <span class="f">(</span><span class="b">var</span><span class="f">)</span>        \
<a name="299" /><span class="Maybe">     299:</span>                 <span class="f">:</span> <span class="e">&quot;r&quot;</span> <span class="f">(</span><span class="b">pxo_new__</span><span class="f">)</span>                \
<a name="300" /><span class="Maybe">     300:</span>                 <span class="f">:</span> <span class="e">&quot;memory&quot;</span><span class="f">)</span><span class="f">;</span>                \
<a name="301" /><span class="Maybe">     301:</span>         <span class="m">break</span><span class="f">;</span>                            \
<a name="302" /><span class="Maybe">     302:</span>     <span class="m">case</span> <span class="c">8</span><span class="f">:</span>                                \
<a name="303" /><span class="Maybe">     303:</span>         <span class="m">asm</span><span class="f">(</span><span class="e">&quot;\n\tmov &quot;</span><a href="cpu.c_macros_ref.html#_X19wZXJjcHVfYXJnXzA_"><span class="b">__percpu_arg</span></a><span class="f">(</span><span class="c">1</span><span class="f">)</span><span class="e">&quot;,%%rax&quot;</span>            \
<a name="304" /><span class="Maybe">     304:</span>             <span class="e">&quot;\n1:\tcmpxchgq %2, &quot;</span><a href="cpu.c_macros_ref.html#_X19wZXJjcHVfYXJnXzA_"><span class="b">__percpu_arg</span></a><span class="f">(</span><span class="c">1</span><span class="f">)</span>        \
<a name="305" /><span class="Maybe">     305:</span>             <span class="e">&quot;\n\tjnz 1b&quot;</span>                    \
<a name="306" /><span class="Maybe">     306:</span>                 <span class="f">:</span> <span class="e">&quot;=&amp;a&quot;</span> <span class="f">(</span><span class="b">pxo_ret__</span><span class="f">)</span><span class="f">,</span> <span class="e">&quot;+m&quot;</span> <span class="f">(</span><span class="b">var</span><span class="f">)</span>        \
<a name="307" /><span class="Maybe">     307:</span>                 <span class="f">:</span> <span class="e">&quot;r&quot;</span> <span class="f">(</span><span class="b">pxo_new__</span><span class="f">)</span>                \
<a name="308" /><span class="Maybe">     308:</span>                 <span class="f">:</span> <span class="e">&quot;memory&quot;</span><span class="f">)</span><span class="f">;</span>                \
<a name="309" /><span class="Maybe">     309:</span>         <span class="m">break</span><span class="f">;</span>                            \
<a name="310" /><span class="Maybe">     310:</span>     <span class="m">default</span><span class="f">:</span> <span class="b">__bad_percpu_size</span><span class="f">(</span><span class="f">)</span><span class="f">;</span>                    \
<a name="311" /><span class="Maybe">     311:</span>     <span class="f">}</span>                                \
<a name="312" /><span class="Maybe">     312:</span>     <span class="b">pxo_ret__</span><span class="f">;</span>                            \
<a name="313" /><span class="Maybe">     313:</span> <span class="f">}</span><span class="f">)</span>
<a name="314" /><span class="Maybe">     314:</span> 
<a name="315" /><span class="Maybe">     315:</span> <span class="k">/*</span>
<a name="316" /><span class="Maybe">     316:</span> <span class="k"> * cmpxchg has no such implied lock semantics as a result it is much</span>
<a name="317" /><span class="Maybe">     317:</span> <span class="k"> * more efficient for cpu local operations.</span>
<a name="318" /><span class="Maybe">     318:</span> <span class="k"> */</span>
<a name="319" /><span class="Maybe">     319:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_cGVyY3B1X2NtcHhjaGdfb3BfMA__"><span class="b">percpu_cmpxchg_op</span></a><span class="f">(</span><span class="b">var</span><span class="f">,</span> <span class="b">oval</span><span class="f">,</span> <span class="b">nval</span><span class="f">)</span>                \
<a name="320" /><span class="Maybe">     320:</span> <span class="f">(</span><span class="f">{</span>                                    \
<a name="321" /><span class="Maybe">     321:</span>     <span class="b">typeof</span><span class="f">(</span><span class="b">var</span><span class="f">)</span> <span class="b">pco_ret__</span><span class="f">;</span>                        \
<a name="322" /><span class="Maybe">     322:</span>     <span class="b">typeof</span><span class="f">(</span><span class="b">var</span><span class="f">)</span> <span class="b">pco_old__</span> <span class="f">=</span> <span class="f">(</span><span class="b">oval</span><span class="f">)</span><span class="f">;</span>                    \
<a name="323" /><span class="Maybe">     323:</span>     <span class="b">typeof</span><span class="f">(</span><span class="b">var</span><span class="f">)</span> <span class="b">pco_new__</span> <span class="f">=</span> <span class="f">(</span><span class="b">nval</span><span class="f">)</span><span class="f">;</span>                    \
<a name="324" /><span class="Maybe">     324:</span>     <span class="m">switch</span> <span class="f">(</span><span class="m">sizeof</span><span class="f">(</span><span class="b">var</span><span class="f">)</span><span class="f">)</span> <span class="f">{</span>                        \
<a name="325" /><span class="Maybe">     325:</span>     <span class="m">case</span> <span class="c">1</span><span class="f">:</span>                                \
<a name="326" /><span class="Maybe">     326:</span>         <span class="m">asm</span><span class="f">(</span><span class="e">&quot;cmpxchgb %2, &quot;</span><a href="cpu.c_macros_ref.html#_X19wZXJjcHVfYXJnXzA_"><span class="b">__percpu_arg</span></a><span class="f">(</span><span class="c">1</span><span class="f">)</span>            \
<a name="327" /><span class="Maybe">     327:</span>                 <span class="f">:</span> <span class="e">&quot;=a&quot;</span> <span class="f">(</span><span class="b">pco_ret__</span><span class="f">)</span><span class="f">,</span> <span class="e">&quot;+m&quot;</span> <span class="f">(</span><span class="b">var</span><span class="f">)</span>        \
<a name="328" /><span class="Maybe">     328:</span>                 <span class="f">:</span> <span class="e">&quot;q&quot;</span> <span class="f">(</span><span class="b">pco_new__</span><span class="f">)</span><span class="f">,</span> <span class="e">&quot;0&quot;</span> <span class="f">(</span><span class="b">pco_old__</span><span class="f">)</span>        \
<a name="329" /><span class="Maybe">     329:</span>                 <span class="f">:</span> <span class="e">&quot;memory&quot;</span><span class="f">)</span><span class="f">;</span>                \
<a name="330" /><span class="Maybe">     330:</span>         <span class="m">break</span><span class="f">;</span>                            \
<a name="331" /><span class="Maybe">     331:</span>     <span class="m">case</span> <span class="c">2</span><span class="f">:</span>                                \
<a name="332" /><span class="Maybe">     332:</span>         <span class="m">asm</span><span class="f">(</span><span class="e">&quot;cmpxchgw %2, &quot;</span><a href="cpu.c_macros_ref.html#_X19wZXJjcHVfYXJnXzA_"><span class="b">__percpu_arg</span></a><span class="f">(</span><span class="c">1</span><span class="f">)</span>            \
<a name="333" /><span class="Maybe">     333:</span>                 <span class="f">:</span> <span class="e">&quot;=a&quot;</span> <span class="f">(</span><span class="b">pco_ret__</span><span class="f">)</span><span class="f">,</span> <span class="e">&quot;+m&quot;</span> <span class="f">(</span><span class="b">var</span><span class="f">)</span>        \
<a name="334" /><span class="Maybe">     334:</span>                 <span class="f">:</span> <span class="e">&quot;r&quot;</span> <span class="f">(</span><span class="b">pco_new__</span><span class="f">)</span><span class="f">,</span> <span class="e">&quot;0&quot;</span> <span class="f">(</span><span class="b">pco_old__</span><span class="f">)</span>        \
<a name="335" /><span class="Maybe">     335:</span>                 <span class="f">:</span> <span class="e">&quot;memory&quot;</span><span class="f">)</span><span class="f">;</span>                \
<a name="336" /><span class="Maybe">     336:</span>         <span class="m">break</span><span class="f">;</span>                            \
<a name="337" /><span class="Maybe">     337:</span>     <span class="m">case</span> <span class="c">4</span><span class="f">:</span>                                \
<a name="338" /><span class="Maybe">     338:</span>         <span class="m">asm</span><span class="f">(</span><span class="e">&quot;cmpxchgl %2, &quot;</span><a href="cpu.c_macros_ref.html#_X19wZXJjcHVfYXJnXzA_"><span class="b">__percpu_arg</span></a><span class="f">(</span><span class="c">1</span><span class="f">)</span>            \
<a name="339" /><span class="Maybe">     339:</span>                 <span class="f">:</span> <span class="e">&quot;=a&quot;</span> <span class="f">(</span><span class="b">pco_ret__</span><span class="f">)</span><span class="f">,</span> <span class="e">&quot;+m&quot;</span> <span class="f">(</span><span class="b">var</span><span class="f">)</span>        \
<a name="340" /><span class="Maybe">     340:</span>                 <span class="f">:</span> <span class="e">&quot;r&quot;</span> <span class="f">(</span><span class="b">pco_new__</span><span class="f">)</span><span class="f">,</span> <span class="e">&quot;0&quot;</span> <span class="f">(</span><span class="b">pco_old__</span><span class="f">)</span>        \
<a name="341" /><span class="Maybe">     341:</span>                 <span class="f">:</span> <span class="e">&quot;memory&quot;</span><span class="f">)</span><span class="f">;</span>                \
<a name="342" /><span class="Maybe">     342:</span>         <span class="m">break</span><span class="f">;</span>                            \
<a name="343" /><span class="Maybe">     343:</span>     <span class="m">case</span> <span class="c">8</span><span class="f">:</span>                                \
<a name="344" /><span class="Maybe">     344:</span>         <span class="m">asm</span><span class="f">(</span><span class="e">&quot;cmpxchgq %2, &quot;</span><a href="cpu.c_macros_ref.html#_X19wZXJjcHVfYXJnXzA_"><span class="b">__percpu_arg</span></a><span class="f">(</span><span class="c">1</span><span class="f">)</span>            \
<a name="345" /><span class="Maybe">     345:</span>                 <span class="f">:</span> <span class="e">&quot;=a&quot;</span> <span class="f">(</span><span class="b">pco_ret__</span><span class="f">)</span><span class="f">,</span> <span class="e">&quot;+m&quot;</span> <span class="f">(</span><span class="b">var</span><span class="f">)</span>        \
<a name="346" /><span class="Maybe">     346:</span>                 <span class="f">:</span> <span class="e">&quot;r&quot;</span> <span class="f">(</span><span class="b">pco_new__</span><span class="f">)</span><span class="f">,</span> <span class="e">&quot;0&quot;</span> <span class="f">(</span><span class="b">pco_old__</span><span class="f">)</span>        \
<a name="347" /><span class="Maybe">     347:</span>                 <span class="f">:</span> <span class="e">&quot;memory&quot;</span><span class="f">)</span><span class="f">;</span>                \
<a name="348" /><span class="Maybe">     348:</span>         <span class="m">break</span><span class="f">;</span>                            \
<a name="349" /><span class="Maybe">     349:</span>     <span class="m">default</span><span class="f">:</span> <span class="b">__bad_percpu_size</span><span class="f">(</span><span class="f">)</span><span class="f">;</span>                    \
<a name="350" /><span class="Maybe">     350:</span>     <span class="f">}</span>                                \
<a name="351" /><span class="Maybe">     351:</span>     <span class="b">pco_ret__</span><span class="f">;</span>                            \
<a name="352" /><span class="Maybe">     352:</span> <span class="f">}</span><span class="f">)</span>
<a name="353" /><span class="Maybe">     353:</span> 
<a name="354" /><span class="Maybe">     354:</span> <span class="k">/*</span>
<a name="355" /><span class="Maybe">     355:</span> <span class="k"> * this_cpu_read() makes gcc load the percpu variable every time it is</span>
<a name="356" /><span class="Maybe">     356:</span> <span class="k"> * accessed while this_cpu_read_stable() allows the value to be cached.</span>
<a name="357" /><span class="Maybe">     357:</span> <span class="k"> * this_cpu_read_stable() is more efficient and can be used if its value</span>
<a name="358" /><span class="Maybe">     358:</span> <span class="k"> * is guaranteed to be valid across cpus.  The current users include</span>
<a name="359" /><span class="Maybe">     359:</span> <span class="k"> * get_current() and get_thread_info() both of which are actually</span>
<a name="360" /><span class="Maybe">     360:</span> <span class="k"> * per-thread variables implemented as per-cpu variables and thus</span>
<a name="361" /><span class="Maybe">     361:</span> <span class="k"> * stable for the duration of the respective task.</span>
<a name="362" /><span class="Maybe">     362:</span> <span class="k"> */</span>
<a name="363" /><span class="Maybe">     363:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_dGhpc19jcHVfcmVhZF9zdGFibGVfMA__"><span class="b">this_cpu_read_stable</span></a><span class="f">(</span><span class="b">var</span><span class="f">)</span>    <a href="cpu.c_macros_ref.html#_cGVyY3B1X2Zyb21fb3BfMA__"><span class="b">percpu_from_op</span></a><span class="f">(</span><span class="e">&quot;mov&quot;</span><span class="f">,</span> <span class="b">var</span><span class="f">,</span> <span class="e">&quot;p&quot;</span> <span class="f">(</span><span class="f">&amp;</span><span class="f">(</span><span class="b">var</span><span class="f">)</span><span class="f">)</span><span class="f">)</span>
<a name="364" /><span class="Maybe">     364:</span> 
<a name="365" /><span class="Maybe">     365:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_X190aGlzX2NwdV9yZWFkXzFfMA__"><span class="b">__this_cpu_read_1</span></a><span class="f">(</span><span class="b">pcp</span><span class="f">)</span>        <a href="cpu.c_macros_ref.html#_cGVyY3B1X2Zyb21fb3BfMA__"><span class="b">percpu_from_op</span></a><span class="f">(</span><span class="e">&quot;mov&quot;</span><span class="f">,</span> <span class="f">(</span><span class="b">pcp</span><span class="f">)</span><span class="f">,</span> <span class="e">&quot;m&quot;</span><span class="f">(</span><span class="b">pcp</span><span class="f">)</span><span class="f">)</span>
<a name="366" /><span class="Maybe">     366:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_X190aGlzX2NwdV9yZWFkXzJfMA__"><span class="b">__this_cpu_read_2</span></a><span class="f">(</span><span class="b">pcp</span><span class="f">)</span>        <a href="cpu.c_macros_ref.html#_cGVyY3B1X2Zyb21fb3BfMA__"><span class="b">percpu_from_op</span></a><span class="f">(</span><span class="e">&quot;mov&quot;</span><span class="f">,</span> <span class="f">(</span><span class="b">pcp</span><span class="f">)</span><span class="f">,</span> <span class="e">&quot;m&quot;</span><span class="f">(</span><span class="b">pcp</span><span class="f">)</span><span class="f">)</span>
<a name="367" /><span class="Maybe">     367:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_X190aGlzX2NwdV9yZWFkXzRfMA__"><span class="b">__this_cpu_read_4</span></a><span class="f">(</span><span class="b">pcp</span><span class="f">)</span>        <a href="cpu.c_macros_ref.html#_cGVyY3B1X2Zyb21fb3BfMA__"><span class="b">percpu_from_op</span></a><span class="f">(</span><span class="e">&quot;mov&quot;</span><span class="f">,</span> <span class="f">(</span><span class="b">pcp</span><span class="f">)</span><span class="f">,</span> <span class="e">&quot;m&quot;</span><span class="f">(</span><span class="b">pcp</span><span class="f">)</span><span class="f">)</span>
<a name="368" /><span class="Maybe">     368:</span> 
<a name="369" /><span class="Maybe">     369:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_X190aGlzX2NwdV93cml0ZV8xXzA_"><span class="b">__this_cpu_write_1</span></a><span class="f">(</span><span class="b">pcp</span><span class="f">,</span> <span class="b">val</span><span class="f">)</span>    <a href="cpu.c_macros_ref.html#_cGVyY3B1X3RvX29wXzA_"><span class="b">percpu_to_op</span></a><span class="f">(</span><span class="e">&quot;mov&quot;</span><span class="f">,</span> <span class="f">(</span><span class="b">pcp</span><span class="f">)</span><span class="f">,</span> <span class="b">val</span><span class="f">)</span>
<a name="370" /><span class="Maybe">     370:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_X190aGlzX2NwdV93cml0ZV8yXzA_"><span class="b">__this_cpu_write_2</span></a><span class="f">(</span><span class="b">pcp</span><span class="f">,</span> <span class="b">val</span><span class="f">)</span>    <a href="cpu.c_macros_ref.html#_cGVyY3B1X3RvX29wXzA_"><span class="b">percpu_to_op</span></a><span class="f">(</span><span class="e">&quot;mov&quot;</span><span class="f">,</span> <span class="f">(</span><span class="b">pcp</span><span class="f">)</span><span class="f">,</span> <span class="b">val</span><span class="f">)</span>
<a name="371" /><span class="Maybe">     371:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_X190aGlzX2NwdV93cml0ZV80XzA_"><span class="b">__this_cpu_write_4</span></a><span class="f">(</span><span class="b">pcp</span><span class="f">,</span> <span class="b">val</span><span class="f">)</span>    <a href="cpu.c_macros_ref.html#_cGVyY3B1X3RvX29wXzA_"><span class="b">percpu_to_op</span></a><span class="f">(</span><span class="e">&quot;mov&quot;</span><span class="f">,</span> <span class="f">(</span><span class="b">pcp</span><span class="f">)</span><span class="f">,</span> <span class="b">val</span><span class="f">)</span>
<a name="372" /><span class="Maybe">     372:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_X190aGlzX2NwdV9hZGRfMV8w"><span class="b">__this_cpu_add_1</span></a><span class="f">(</span><span class="b">pcp</span><span class="f">,</span> <span class="b">val</span><span class="f">)</span>    <a href="cpu.c_macros_ref.html#_cGVyY3B1X2FkZF9vcF8w"><span class="b">percpu_add_op</span></a><span class="f">(</span><span class="f">(</span><span class="b">pcp</span><span class="f">)</span><span class="f">,</span> <span class="b">val</span><span class="f">)</span>
<a name="373" /><span class="Maybe">     373:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_X190aGlzX2NwdV9hZGRfMl8w"><span class="b">__this_cpu_add_2</span></a><span class="f">(</span><span class="b">pcp</span><span class="f">,</span> <span class="b">val</span><span class="f">)</span>    <a href="cpu.c_macros_ref.html#_cGVyY3B1X2FkZF9vcF8w"><span class="b">percpu_add_op</span></a><span class="f">(</span><span class="f">(</span><span class="b">pcp</span><span class="f">)</span><span class="f">,</span> <span class="b">val</span><span class="f">)</span>
<a name="374" /><span class="Maybe">     374:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_X190aGlzX2NwdV9hZGRfNF8w"><span class="b">__this_cpu_add_4</span></a><span class="f">(</span><span class="b">pcp</span><span class="f">,</span> <span class="b">val</span><span class="f">)</span>    <a href="cpu.c_macros_ref.html#_cGVyY3B1X2FkZF9vcF8w"><span class="b">percpu_add_op</span></a><span class="f">(</span><span class="f">(</span><span class="b">pcp</span><span class="f">)</span><span class="f">,</span> <span class="b">val</span><span class="f">)</span>
<a name="375" /><span class="Maybe">     375:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_X190aGlzX2NwdV9hbmRfMV8w"><span class="b">__this_cpu_and_1</span></a><span class="f">(</span><span class="b">pcp</span><span class="f">,</span> <span class="b">val</span><span class="f">)</span>    <a href="cpu.c_macros_ref.html#_cGVyY3B1X3RvX29wXzA_"><span class="b">percpu_to_op</span></a><span class="f">(</span><span class="e">&quot;and&quot;</span><span class="f">,</span> <span class="f">(</span><span class="b">pcp</span><span class="f">)</span><span class="f">,</span> <span class="b">val</span><span class="f">)</span>
<a name="376" /><span class="Maybe">     376:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_X190aGlzX2NwdV9hbmRfMl8w"><span class="b">__this_cpu_and_2</span></a><span class="f">(</span><span class="b">pcp</span><span class="f">,</span> <span class="b">val</span><span class="f">)</span>    <a href="cpu.c_macros_ref.html#_cGVyY3B1X3RvX29wXzA_"><span class="b">percpu_to_op</span></a><span class="f">(</span><span class="e">&quot;and&quot;</span><span class="f">,</span> <span class="f">(</span><span class="b">pcp</span><span class="f">)</span><span class="f">,</span> <span class="b">val</span><span class="f">)</span>
<a name="377" /><span class="Maybe">     377:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_X190aGlzX2NwdV9hbmRfNF8w"><span class="b">__this_cpu_and_4</span></a><span class="f">(</span><span class="b">pcp</span><span class="f">,</span> <span class="b">val</span><span class="f">)</span>    <a href="cpu.c_macros_ref.html#_cGVyY3B1X3RvX29wXzA_"><span class="b">percpu_to_op</span></a><span class="f">(</span><span class="e">&quot;and&quot;</span><span class="f">,</span> <span class="f">(</span><span class="b">pcp</span><span class="f">)</span><span class="f">,</span> <span class="b">val</span><span class="f">)</span>
<a name="378" /><span class="Maybe">     378:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_X190aGlzX2NwdV9vcl8xXzA_"><span class="b">__this_cpu_or_1</span></a><span class="f">(</span><span class="b">pcp</span><span class="f">,</span> <span class="b">val</span><span class="f">)</span>    <a href="cpu.c_macros_ref.html#_cGVyY3B1X3RvX29wXzA_"><span class="b">percpu_to_op</span></a><span class="f">(</span><span class="e">&quot;or&quot;</span><span class="f">,</span> <span class="f">(</span><span class="b">pcp</span><span class="f">)</span><span class="f">,</span> <span class="b">val</span><span class="f">)</span>
<a name="379" /><span class="Maybe">     379:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_X190aGlzX2NwdV9vcl8yXzA_"><span class="b">__this_cpu_or_2</span></a><span class="f">(</span><span class="b">pcp</span><span class="f">,</span> <span class="b">val</span><span class="f">)</span>    <a href="cpu.c_macros_ref.html#_cGVyY3B1X3RvX29wXzA_"><span class="b">percpu_to_op</span></a><span class="f">(</span><span class="e">&quot;or&quot;</span><span class="f">,</span> <span class="f">(</span><span class="b">pcp</span><span class="f">)</span><span class="f">,</span> <span class="b">val</span><span class="f">)</span>
<a name="380" /><span class="Maybe">     380:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_X190aGlzX2NwdV9vcl80XzA_"><span class="b">__this_cpu_or_4</span></a><span class="f">(</span><span class="b">pcp</span><span class="f">,</span> <span class="b">val</span><span class="f">)</span>    <a href="cpu.c_macros_ref.html#_cGVyY3B1X3RvX29wXzA_"><span class="b">percpu_to_op</span></a><span class="f">(</span><span class="e">&quot;or&quot;</span><span class="f">,</span> <span class="f">(</span><span class="b">pcp</span><span class="f">)</span><span class="f">,</span> <span class="b">val</span><span class="f">)</span>
<a name="381" /><span class="Maybe">     381:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_X190aGlzX2NwdV94Y2hnXzFfMA__"><span class="b">__this_cpu_xchg_1</span></a><span class="f">(</span><span class="b">pcp</span><span class="f">,</span> <span class="b">val</span><span class="f">)</span>    <a href="cpu.c_macros_noref.html#_cGVyY3B1X3hjaGdfb3BfMA__"><span class="b">percpu_xchg_op</span></a><span class="f">(</span><span class="b">pcp</span><span class="f">,</span> <span class="b">val</span><span class="f">)</span>
<a name="382" /><span class="Maybe">     382:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_X190aGlzX2NwdV94Y2hnXzJfMA__"><span class="b">__this_cpu_xchg_2</span></a><span class="f">(</span><span class="b">pcp</span><span class="f">,</span> <span class="b">val</span><span class="f">)</span>    <a href="cpu.c_macros_noref.html#_cGVyY3B1X3hjaGdfb3BfMA__"><span class="b">percpu_xchg_op</span></a><span class="f">(</span><span class="b">pcp</span><span class="f">,</span> <span class="b">val</span><span class="f">)</span>
<a name="383" /><span class="Maybe">     383:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_X190aGlzX2NwdV94Y2hnXzRfMA__"><span class="b">__this_cpu_xchg_4</span></a><span class="f">(</span><span class="b">pcp</span><span class="f">,</span> <span class="b">val</span><span class="f">)</span>    <a href="cpu.c_macros_noref.html#_cGVyY3B1X3hjaGdfb3BfMA__"><span class="b">percpu_xchg_op</span></a><span class="f">(</span><span class="b">pcp</span><span class="f">,</span> <span class="b">val</span><span class="f">)</span>
<a name="384" /><span class="Maybe">     384:</span> 
<a name="385" /><span class="Maybe">     385:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_dGhpc19jcHVfcmVhZF8xXzA_"><span class="b">this_cpu_read_1</span></a><span class="f">(</span><span class="b">pcp</span><span class="f">)</span>        <a href="cpu.c_macros_ref.html#_cGVyY3B1X2Zyb21fb3BfMA__"><span class="b">percpu_from_op</span></a><span class="f">(</span><span class="e">&quot;mov&quot;</span><span class="f">,</span> <span class="f">(</span><span class="b">pcp</span><span class="f">)</span><span class="f">,</span> <span class="e">&quot;m&quot;</span><span class="f">(</span><span class="b">pcp</span><span class="f">)</span><span class="f">)</span>
<a name="386" /><span class="Maybe">     386:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_dGhpc19jcHVfcmVhZF8yXzA_"><span class="b">this_cpu_read_2</span></a><span class="f">(</span><span class="b">pcp</span><span class="f">)</span>        <a href="cpu.c_macros_ref.html#_cGVyY3B1X2Zyb21fb3BfMA__"><span class="b">percpu_from_op</span></a><span class="f">(</span><span class="e">&quot;mov&quot;</span><span class="f">,</span> <span class="f">(</span><span class="b">pcp</span><span class="f">)</span><span class="f">,</span> <span class="e">&quot;m&quot;</span><span class="f">(</span><span class="b">pcp</span><span class="f">)</span><span class="f">)</span>
<a name="387" /><span class="Maybe">     387:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_dGhpc19jcHVfcmVhZF80XzA_"><span class="b">this_cpu_read_4</span></a><span class="f">(</span><span class="b">pcp</span><span class="f">)</span>        <a href="cpu.c_macros_ref.html#_cGVyY3B1X2Zyb21fb3BfMA__"><span class="b">percpu_from_op</span></a><span class="f">(</span><span class="e">&quot;mov&quot;</span><span class="f">,</span> <span class="f">(</span><span class="b">pcp</span><span class="f">)</span><span class="f">,</span> <span class="e">&quot;m&quot;</span><span class="f">(</span><span class="b">pcp</span><span class="f">)</span><span class="f">)</span>
<a name="388" /><span class="Maybe">     388:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_dGhpc19jcHVfd3JpdGVfMV8w"><span class="b">this_cpu_write_1</span></a><span class="f">(</span><span class="b">pcp</span><span class="f">,</span> <span class="b">val</span><span class="f">)</span>    <a href="cpu.c_macros_ref.html#_cGVyY3B1X3RvX29wXzA_"><span class="b">percpu_to_op</span></a><span class="f">(</span><span class="e">&quot;mov&quot;</span><span class="f">,</span> <span class="f">(</span><span class="b">pcp</span><span class="f">)</span><span class="f">,</span> <span class="b">val</span><span class="f">)</span>
<a name="389" /><span class="Maybe">     389:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_dGhpc19jcHVfd3JpdGVfMl8w"><span class="b">this_cpu_write_2</span></a><span class="f">(</span><span class="b">pcp</span><span class="f">,</span> <span class="b">val</span><span class="f">)</span>    <a href="cpu.c_macros_ref.html#_cGVyY3B1X3RvX29wXzA_"><span class="b">percpu_to_op</span></a><span class="f">(</span><span class="e">&quot;mov&quot;</span><span class="f">,</span> <span class="f">(</span><span class="b">pcp</span><span class="f">)</span><span class="f">,</span> <span class="b">val</span><span class="f">)</span>
<a name="390" /><span class="Maybe">     390:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_dGhpc19jcHVfd3JpdGVfNF8w"><span class="b">this_cpu_write_4</span></a><span class="f">(</span><span class="b">pcp</span><span class="f">,</span> <span class="b">val</span><span class="f">)</span>    <a href="cpu.c_macros_ref.html#_cGVyY3B1X3RvX29wXzA_"><span class="b">percpu_to_op</span></a><span class="f">(</span><span class="e">&quot;mov&quot;</span><span class="f">,</span> <span class="f">(</span><span class="b">pcp</span><span class="f">)</span><span class="f">,</span> <span class="b">val</span><span class="f">)</span>
<a name="391" /><span class="Maybe">     391:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_dGhpc19jcHVfYWRkXzFfMA__"><span class="b">this_cpu_add_1</span></a><span class="f">(</span><span class="b">pcp</span><span class="f">,</span> <span class="b">val</span><span class="f">)</span>    <a href="cpu.c_macros_ref.html#_cGVyY3B1X2FkZF9vcF8w"><span class="b">percpu_add_op</span></a><span class="f">(</span><span class="f">(</span><span class="b">pcp</span><span class="f">)</span><span class="f">,</span> <span class="b">val</span><span class="f">)</span>
<a name="392" /><span class="Maybe">     392:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_dGhpc19jcHVfYWRkXzJfMA__"><span class="b">this_cpu_add_2</span></a><span class="f">(</span><span class="b">pcp</span><span class="f">,</span> <span class="b">val</span><span class="f">)</span>    <a href="cpu.c_macros_ref.html#_cGVyY3B1X2FkZF9vcF8w"><span class="b">percpu_add_op</span></a><span class="f">(</span><span class="f">(</span><span class="b">pcp</span><span class="f">)</span><span class="f">,</span> <span class="b">val</span><span class="f">)</span>
<a name="393" /><span class="Maybe">     393:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_dGhpc19jcHVfYWRkXzRfMA__"><span class="b">this_cpu_add_4</span></a><span class="f">(</span><span class="b">pcp</span><span class="f">,</span> <span class="b">val</span><span class="f">)</span>    <a href="cpu.c_macros_ref.html#_cGVyY3B1X2FkZF9vcF8w"><span class="b">percpu_add_op</span></a><span class="f">(</span><span class="f">(</span><span class="b">pcp</span><span class="f">)</span><span class="f">,</span> <span class="b">val</span><span class="f">)</span>
<a name="394" /><span class="Maybe">     394:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_dGhpc19jcHVfYW5kXzFfMA__"><span class="b">this_cpu_and_1</span></a><span class="f">(</span><span class="b">pcp</span><span class="f">,</span> <span class="b">val</span><span class="f">)</span>    <a href="cpu.c_macros_ref.html#_cGVyY3B1X3RvX29wXzA_"><span class="b">percpu_to_op</span></a><span class="f">(</span><span class="e">&quot;and&quot;</span><span class="f">,</span> <span class="f">(</span><span class="b">pcp</span><span class="f">)</span><span class="f">,</span> <span class="b">val</span><span class="f">)</span>
<a name="395" /><span class="Maybe">     395:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_dGhpc19jcHVfYW5kXzJfMA__"><span class="b">this_cpu_and_2</span></a><span class="f">(</span><span class="b">pcp</span><span class="f">,</span> <span class="b">val</span><span class="f">)</span>    <a href="cpu.c_macros_ref.html#_cGVyY3B1X3RvX29wXzA_"><span class="b">percpu_to_op</span></a><span class="f">(</span><span class="e">&quot;and&quot;</span><span class="f">,</span> <span class="f">(</span><span class="b">pcp</span><span class="f">)</span><span class="f">,</span> <span class="b">val</span><span class="f">)</span>
<a name="396" /><span class="Maybe">     396:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_dGhpc19jcHVfYW5kXzRfMA__"><span class="b">this_cpu_and_4</span></a><span class="f">(</span><span class="b">pcp</span><span class="f">,</span> <span class="b">val</span><span class="f">)</span>    <a href="cpu.c_macros_ref.html#_cGVyY3B1X3RvX29wXzA_"><span class="b">percpu_to_op</span></a><span class="f">(</span><span class="e">&quot;and&quot;</span><span class="f">,</span> <span class="f">(</span><span class="b">pcp</span><span class="f">)</span><span class="f">,</span> <span class="b">val</span><span class="f">)</span>
<a name="397" /><span class="Maybe">     397:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_dGhpc19jcHVfb3JfMV8w"><span class="b">this_cpu_or_1</span></a><span class="f">(</span><span class="b">pcp</span><span class="f">,</span> <span class="b">val</span><span class="f">)</span>        <a href="cpu.c_macros_ref.html#_cGVyY3B1X3RvX29wXzA_"><span class="b">percpu_to_op</span></a><span class="f">(</span><span class="e">&quot;or&quot;</span><span class="f">,</span> <span class="f">(</span><span class="b">pcp</span><span class="f">)</span><span class="f">,</span> <span class="b">val</span><span class="f">)</span>
<a name="398" /><span class="Maybe">     398:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_dGhpc19jcHVfb3JfMl8w"><span class="b">this_cpu_or_2</span></a><span class="f">(</span><span class="b">pcp</span><span class="f">,</span> <span class="b">val</span><span class="f">)</span>        <a href="cpu.c_macros_ref.html#_cGVyY3B1X3RvX29wXzA_"><span class="b">percpu_to_op</span></a><span class="f">(</span><span class="e">&quot;or&quot;</span><span class="f">,</span> <span class="f">(</span><span class="b">pcp</span><span class="f">)</span><span class="f">,</span> <span class="b">val</span><span class="f">)</span>
<a name="399" /><span class="Maybe">     399:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_dGhpc19jcHVfb3JfNF8w"><span class="b">this_cpu_or_4</span></a><span class="f">(</span><span class="b">pcp</span><span class="f">,</span> <span class="b">val</span><span class="f">)</span>        <a href="cpu.c_macros_ref.html#_cGVyY3B1X3RvX29wXzA_"><span class="b">percpu_to_op</span></a><span class="f">(</span><span class="e">&quot;or&quot;</span><span class="f">,</span> <span class="f">(</span><span class="b">pcp</span><span class="f">)</span><span class="f">,</span> <span class="b">val</span><span class="f">)</span>
<a name="400" /><span class="Maybe">     400:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_dGhpc19jcHVfeGNoZ18xXzA_"><span class="b">this_cpu_xchg_1</span></a><span class="f">(</span><span class="b">pcp</span><span class="f">,</span> <span class="b">nval</span><span class="f">)</span>    <a href="cpu.c_macros_noref.html#_cGVyY3B1X3hjaGdfb3BfMA__"><span class="b">percpu_xchg_op</span></a><span class="f">(</span><span class="b">pcp</span><span class="f">,</span> <span class="b">nval</span><span class="f">)</span>
<a name="401" /><span class="Maybe">     401:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_dGhpc19jcHVfeGNoZ18yXzA_"><span class="b">this_cpu_xchg_2</span></a><span class="f">(</span><span class="b">pcp</span><span class="f">,</span> <span class="b">nval</span><span class="f">)</span>    <a href="cpu.c_macros_noref.html#_cGVyY3B1X3hjaGdfb3BfMA__"><span class="b">percpu_xchg_op</span></a><span class="f">(</span><span class="b">pcp</span><span class="f">,</span> <span class="b">nval</span><span class="f">)</span>
<a name="402" /><span class="Maybe">     402:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_dGhpc19jcHVfeGNoZ180XzA_"><span class="b">this_cpu_xchg_4</span></a><span class="f">(</span><span class="b">pcp</span><span class="f">,</span> <span class="b">nval</span><span class="f">)</span>    <a href="cpu.c_macros_noref.html#_cGVyY3B1X3hjaGdfb3BfMA__"><span class="b">percpu_xchg_op</span></a><span class="f">(</span><span class="b">pcp</span><span class="f">,</span> <span class="b">nval</span><span class="f">)</span>
<a name="403" /><span class="Maybe">     403:</span> 
<a name="404" /><span class="Maybe">     404:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_X190aGlzX2NwdV9hZGRfcmV0dXJuXzFfMA__"><span class="b">__this_cpu_add_return_1</span></a><span class="f">(</span><span class="b">pcp</span><span class="f">,</span> <span class="b">val</span><span class="f">)</span> <a href="cpu.c_macros_noref.html#_cGVyY3B1X2FkZF9yZXR1cm5fb3BfMA__"><span class="b">percpu_add_return_op</span></a><span class="f">(</span><span class="b">pcp</span><span class="f">,</span> <span class="b">val</span><span class="f">)</span>
<a name="405" /><span class="Maybe">     405:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_X190aGlzX2NwdV9hZGRfcmV0dXJuXzJfMA__"><span class="b">__this_cpu_add_return_2</span></a><span class="f">(</span><span class="b">pcp</span><span class="f">,</span> <span class="b">val</span><span class="f">)</span> <a href="cpu.c_macros_noref.html#_cGVyY3B1X2FkZF9yZXR1cm5fb3BfMA__"><span class="b">percpu_add_return_op</span></a><span class="f">(</span><span class="b">pcp</span><span class="f">,</span> <span class="b">val</span><span class="f">)</span>
<a name="406" /><span class="Maybe">     406:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_X190aGlzX2NwdV9hZGRfcmV0dXJuXzRfMA__"><span class="b">__this_cpu_add_return_4</span></a><span class="f">(</span><span class="b">pcp</span><span class="f">,</span> <span class="b">val</span><span class="f">)</span> <a href="cpu.c_macros_noref.html#_cGVyY3B1X2FkZF9yZXR1cm5fb3BfMA__"><span class="b">percpu_add_return_op</span></a><span class="f">(</span><span class="b">pcp</span><span class="f">,</span> <span class="b">val</span><span class="f">)</span>
<a name="407" /><span class="Maybe">     407:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_X190aGlzX2NwdV9jbXB4Y2hnXzFfMA__"><span class="b">__this_cpu_cmpxchg_1</span></a><span class="f">(</span><span class="b">pcp</span><span class="f">,</span> <span class="b">oval</span><span class="f">,</span> <span class="b">nval</span><span class="f">)</span>    <a href="cpu.c_macros_noref.html#_cGVyY3B1X2NtcHhjaGdfb3BfMA__"><span class="b">percpu_cmpxchg_op</span></a><span class="f">(</span><span class="b">pcp</span><span class="f">,</span> <span class="b">oval</span><span class="f">,</span> <span class="b">nval</span><span class="f">)</span>
<a name="408" /><span class="Maybe">     408:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_X190aGlzX2NwdV9jbXB4Y2hnXzJfMA__"><span class="b">__this_cpu_cmpxchg_2</span></a><span class="f">(</span><span class="b">pcp</span><span class="f">,</span> <span class="b">oval</span><span class="f">,</span> <span class="b">nval</span><span class="f">)</span>    <a href="cpu.c_macros_noref.html#_cGVyY3B1X2NtcHhjaGdfb3BfMA__"><span class="b">percpu_cmpxchg_op</span></a><span class="f">(</span><span class="b">pcp</span><span class="f">,</span> <span class="b">oval</span><span class="f">,</span> <span class="b">nval</span><span class="f">)</span>
<a name="409" /><span class="Maybe">     409:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_X190aGlzX2NwdV9jbXB4Y2hnXzRfMA__"><span class="b">__this_cpu_cmpxchg_4</span></a><span class="f">(</span><span class="b">pcp</span><span class="f">,</span> <span class="b">oval</span><span class="f">,</span> <span class="b">nval</span><span class="f">)</span>    <a href="cpu.c_macros_noref.html#_cGVyY3B1X2NtcHhjaGdfb3BfMA__"><span class="b">percpu_cmpxchg_op</span></a><span class="f">(</span><span class="b">pcp</span><span class="f">,</span> <span class="b">oval</span><span class="f">,</span> <span class="b">nval</span><span class="f">)</span>
<a name="410" /><span class="Maybe">     410:</span> 
<a name="411" /><span class="Maybe">     411:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_dGhpc19jcHVfYWRkX3JldHVybl8xXzA_"><span class="b">this_cpu_add_return_1</span></a><span class="f">(</span><span class="b">pcp</span><span class="f">,</span> <span class="b">val</span><span class="f">)</span>    <a href="cpu.c_macros_noref.html#_cGVyY3B1X2FkZF9yZXR1cm5fb3BfMA__"><span class="b">percpu_add_return_op</span></a><span class="f">(</span><span class="b">pcp</span><span class="f">,</span> <span class="b">val</span><span class="f">)</span>
<a name="412" /><span class="Maybe">     412:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_dGhpc19jcHVfYWRkX3JldHVybl8yXzA_"><span class="b">this_cpu_add_return_2</span></a><span class="f">(</span><span class="b">pcp</span><span class="f">,</span> <span class="b">val</span><span class="f">)</span>    <a href="cpu.c_macros_noref.html#_cGVyY3B1X2FkZF9yZXR1cm5fb3BfMA__"><span class="b">percpu_add_return_op</span></a><span class="f">(</span><span class="b">pcp</span><span class="f">,</span> <span class="b">val</span><span class="f">)</span>
<a name="413" /><span class="Maybe">     413:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_dGhpc19jcHVfYWRkX3JldHVybl80XzA_"><span class="b">this_cpu_add_return_4</span></a><span class="f">(</span><span class="b">pcp</span><span class="f">,</span> <span class="b">val</span><span class="f">)</span>    <a href="cpu.c_macros_noref.html#_cGVyY3B1X2FkZF9yZXR1cm5fb3BfMA__"><span class="b">percpu_add_return_op</span></a><span class="f">(</span><span class="b">pcp</span><span class="f">,</span> <span class="b">val</span><span class="f">)</span>
<a name="414" /><span class="Maybe">     414:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_dGhpc19jcHVfY21weGNoZ18xXzA_"><span class="b">this_cpu_cmpxchg_1</span></a><span class="f">(</span><span class="b">pcp</span><span class="f">,</span> <span class="b">oval</span><span class="f">,</span> <span class="b">nval</span><span class="f">)</span>    <a href="cpu.c_macros_noref.html#_cGVyY3B1X2NtcHhjaGdfb3BfMA__"><span class="b">percpu_cmpxchg_op</span></a><span class="f">(</span><span class="b">pcp</span><span class="f">,</span> <span class="b">oval</span><span class="f">,</span> <span class="b">nval</span><span class="f">)</span>
<a name="415" /><span class="Maybe">     415:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_dGhpc19jcHVfY21weGNoZ18yXzA_"><span class="b">this_cpu_cmpxchg_2</span></a><span class="f">(</span><span class="b">pcp</span><span class="f">,</span> <span class="b">oval</span><span class="f">,</span> <span class="b">nval</span><span class="f">)</span>    <a href="cpu.c_macros_noref.html#_cGVyY3B1X2NtcHhjaGdfb3BfMA__"><span class="b">percpu_cmpxchg_op</span></a><span class="f">(</span><span class="b">pcp</span><span class="f">,</span> <span class="b">oval</span><span class="f">,</span> <span class="b">nval</span><span class="f">)</span>
<a name="416" /><span class="Maybe">     416:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_dGhpc19jcHVfY21weGNoZ180XzA_"><span class="b">this_cpu_cmpxchg_4</span></a><span class="f">(</span><span class="b">pcp</span><span class="f">,</span> <span class="b">oval</span><span class="f">,</span> <span class="b">nval</span><span class="f">)</span>    <a href="cpu.c_macros_noref.html#_cGVyY3B1X2NtcHhjaGdfb3BfMA__"><span class="b">percpu_cmpxchg_op</span></a><span class="f">(</span><span class="b">pcp</span><span class="f">,</span> <span class="b">oval</span><span class="f">,</span> <span class="b">nval</span><span class="f">)</span>
<a name="417" /><span class="Maybe">     417:</span> 
<a name="418" /><span class="Maybe">     418:</span> <span class="f">#</span><span class="n">ifdef</span> <a href="cpu.c_macros_ref.html#_Q09ORklHX1g4Nl9DTVBYQ0hHNjRfMA__"><span class="b">CONFIG_X86_CMPXCHG64</span></a>
<a name="419" /><span class="Maybe">     419:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_cGVyY3B1X2NtcHhjaGc4Yl9kb3VibGVfMA__"><span class="b">percpu_cmpxchg8b_double</span></a><span class="f">(</span><span class="b">pcp1</span><span class="f">,</span> <span class="b">pcp2</span><span class="f">,</span> <span class="b">o1</span><span class="f">,</span> <span class="b">o2</span><span class="f">,</span> <span class="b">n1</span><span class="f">,</span> <span class="b">n2</span><span class="f">)</span>        \
<a name="420" /><span class="Maybe">     420:</span> <span class="f">(</span><span class="f">{</span>                                    \
<a name="421" /><span class="Maybe">     421:</span>     <span class="m">bool</span> <span class="b">__ret</span><span class="f">;</span>                            \
<a name="422" /><span class="Maybe">     422:</span>     <span class="b">typeof</span><span class="f">(</span><span class="b">pcp1</span><span class="f">)</span> <span class="b">__o1</span> <span class="f">=</span> <span class="f">(</span><span class="b">o1</span><span class="f">)</span><span class="f">,</span> <span class="b">__n1</span> <span class="f">=</span> <span class="f">(</span><span class="b">n1</span><span class="f">)</span><span class="f">;</span>                \
<a name="423" /><span class="Maybe">     423:</span>     <span class="b">typeof</span><span class="f">(</span><span class="b">pcp2</span><span class="f">)</span> <span class="b">__o2</span> <span class="f">=</span> <span class="f">(</span><span class="b">o2</span><span class="f">)</span><span class="f">,</span> <span class="b">__n2</span> <span class="f">=</span> <span class="f">(</span><span class="b">n2</span><span class="f">)</span><span class="f">;</span>                \
<a name="424" /><span class="Maybe">     424:</span>     <span class="m">asm</span> <span class="m">volatile</span><span class="f">(</span><span class="e">&quot;cmpxchg8b &quot;</span><a href="cpu.c_macros_ref.html#_X19wZXJjcHVfYXJnXzA_"><span class="b">__percpu_arg</span></a><span class="f">(</span><span class="c">1</span><span class="f">)</span><span class="e">&quot;\n\tsetz %0\n\t&quot;</span>    \
<a name="425" /><span class="Maybe">     425:</span>             <span class="f">:</span> <span class="e">&quot;=a&quot;</span> <span class="f">(</span><span class="b">__ret</span><span class="f">)</span><span class="f">,</span> <span class="e">&quot;+m&quot;</span> <span class="f">(</span><span class="b">pcp1</span><span class="f">)</span><span class="f">,</span> <span class="e">&quot;+m&quot;</span> <span class="f">(</span><span class="b">pcp2</span><span class="f">)</span><span class="f">,</span> <span class="e">&quot;+d&quot;</span> <span class="f">(</span><span class="b">__o2</span><span class="f">)</span> \
<a name="426" /><span class="Maybe">     426:</span>             <span class="f">:</span>  <span class="e">&quot;b&quot;</span> <span class="f">(</span><span class="b">__n1</span><span class="f">)</span><span class="f">,</span> <span class="e">&quot;c&quot;</span> <span class="f">(</span><span class="b">__n2</span><span class="f">)</span><span class="f">,</span> <span class="e">&quot;a&quot;</span> <span class="f">(</span><span class="b">__o1</span><span class="f">)</span><span class="f">)</span><span class="f">;</span>        \
<a name="427" /><span class="Maybe">     427:</span>     <span class="b">__ret</span><span class="f">;</span>                                \
<a name="428" /><span class="Maybe">     428:</span> <span class="f">}</span><span class="f">)</span>
<a name="429" /><span class="Maybe">     429:</span> 
<a name="430" /><span class="Maybe">     430:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_X190aGlzX2NwdV9jbXB4Y2hnX2RvdWJsZV80XzA_"><span class="b">__this_cpu_cmpxchg_double_4</span></a>    <a href="cpu.c_macros_noref.html#_cGVyY3B1X2NtcHhjaGc4Yl9kb3VibGVfMA__"><span class="b">percpu_cmpxchg8b_double</span></a>
<a name="431" /><span class="Maybe">     431:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_dGhpc19jcHVfY21weGNoZ19kb3VibGVfNF8w"><span class="b">this_cpu_cmpxchg_double_4</span></a>    <a href="cpu.c_macros_noref.html#_cGVyY3B1X2NtcHhjaGc4Yl9kb3VibGVfMA__"><span class="b">percpu_cmpxchg8b_double</span></a>
<a name="432" /><span class="Maybe">     432:</span> <span class="f">#</span><span class="n">endif</span> <span class="k">/* CONFIG_X86_CMPXCHG64 */</span>
<a name="433" /><span class="Maybe">     433:</span> 
<a name="434" /><span class="Maybe">     434:</span> <span class="k">/*</span>
<a name="435" /><span class="Maybe">     435:</span> <span class="k"> * Per cpu atomic 64 bit operations are only available under 64 bit.</span>
<a name="436" /><span class="Maybe">     436:</span> <span class="k"> * 32 bit must fall back to generic operations.</span>
<a name="437" /><span class="Maybe">     437:</span> <span class="k"> */</span>
<a name="438" /><span class="Maybe">     438:</span> <span class="f">#</span><span class="n">ifdef</span> <a href="cpu.c_macros_ref.html#_Q09ORklHX1g4Nl82NF8w"><span class="b">CONFIG_X86_64</span></a>
<a name="439" /><span class="Maybe">     439:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_X190aGlzX2NwdV9yZWFkXzhfMA__"><span class="b">__this_cpu_read_8</span></a><span class="f">(</span><span class="b">pcp</span><span class="f">)</span>        <a href="cpu.c_macros_ref.html#_cGVyY3B1X2Zyb21fb3BfMA__"><span class="b">percpu_from_op</span></a><span class="f">(</span><span class="e">&quot;mov&quot;</span><span class="f">,</span> <span class="f">(</span><span class="b">pcp</span><span class="f">)</span><span class="f">,</span> <span class="e">&quot;m&quot;</span><span class="f">(</span><span class="b">pcp</span><span class="f">)</span><span class="f">)</span>
<a name="440" /><span class="Maybe">     440:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_X190aGlzX2NwdV93cml0ZV84XzA_"><span class="b">__this_cpu_write_8</span></a><span class="f">(</span><span class="b">pcp</span><span class="f">,</span> <span class="b">val</span><span class="f">)</span>    <a href="cpu.c_macros_ref.html#_cGVyY3B1X3RvX29wXzA_"><span class="b">percpu_to_op</span></a><span class="f">(</span><span class="e">&quot;mov&quot;</span><span class="f">,</span> <span class="f">(</span><span class="b">pcp</span><span class="f">)</span><span class="f">,</span> <span class="b">val</span><span class="f">)</span>
<a name="441" /><span class="Maybe">     441:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_X190aGlzX2NwdV9hZGRfOF8w"><span class="b">__this_cpu_add_8</span></a><span class="f">(</span><span class="b">pcp</span><span class="f">,</span> <span class="b">val</span><span class="f">)</span>    <a href="cpu.c_macros_ref.html#_cGVyY3B1X2FkZF9vcF8w"><span class="b">percpu_add_op</span></a><span class="f">(</span><span class="f">(</span><span class="b">pcp</span><span class="f">)</span><span class="f">,</span> <span class="b">val</span><span class="f">)</span>
<a name="442" /><span class="Maybe">     442:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_X190aGlzX2NwdV9hbmRfOF8w"><span class="b">__this_cpu_and_8</span></a><span class="f">(</span><span class="b">pcp</span><span class="f">,</span> <span class="b">val</span><span class="f">)</span>    <a href="cpu.c_macros_ref.html#_cGVyY3B1X3RvX29wXzA_"><span class="b">percpu_to_op</span></a><span class="f">(</span><span class="e">&quot;and&quot;</span><span class="f">,</span> <span class="f">(</span><span class="b">pcp</span><span class="f">)</span><span class="f">,</span> <span class="b">val</span><span class="f">)</span>
<a name="443" /><span class="Maybe">     443:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_X190aGlzX2NwdV9vcl84XzA_"><span class="b">__this_cpu_or_8</span></a><span class="f">(</span><span class="b">pcp</span><span class="f">,</span> <span class="b">val</span><span class="f">)</span>    <a href="cpu.c_macros_ref.html#_cGVyY3B1X3RvX29wXzA_"><span class="b">percpu_to_op</span></a><span class="f">(</span><span class="e">&quot;or&quot;</span><span class="f">,</span> <span class="f">(</span><span class="b">pcp</span><span class="f">)</span><span class="f">,</span> <span class="b">val</span><span class="f">)</span>
<a name="444" /><span class="Maybe">     444:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_X190aGlzX2NwdV9hZGRfcmV0dXJuXzhfMA__"><span class="b">__this_cpu_add_return_8</span></a><span class="f">(</span><span class="b">pcp</span><span class="f">,</span> <span class="b">val</span><span class="f">)</span> <a href="cpu.c_macros_noref.html#_cGVyY3B1X2FkZF9yZXR1cm5fb3BfMA__"><span class="b">percpu_add_return_op</span></a><span class="f">(</span><span class="b">pcp</span><span class="f">,</span> <span class="b">val</span><span class="f">)</span>
<a name="445" /><span class="Maybe">     445:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_X190aGlzX2NwdV94Y2hnXzhfMA__"><span class="b">__this_cpu_xchg_8</span></a><span class="f">(</span><span class="b">pcp</span><span class="f">,</span> <span class="b">nval</span><span class="f">)</span>    <a href="cpu.c_macros_noref.html#_cGVyY3B1X3hjaGdfb3BfMA__"><span class="b">percpu_xchg_op</span></a><span class="f">(</span><span class="b">pcp</span><span class="f">,</span> <span class="b">nval</span><span class="f">)</span>
<a name="446" /><span class="Maybe">     446:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_X190aGlzX2NwdV9jbXB4Y2hnXzhfMA__"><span class="b">__this_cpu_cmpxchg_8</span></a><span class="f">(</span><span class="b">pcp</span><span class="f">,</span> <span class="b">oval</span><span class="f">,</span> <span class="b">nval</span><span class="f">)</span>    <a href="cpu.c_macros_noref.html#_cGVyY3B1X2NtcHhjaGdfb3BfMA__"><span class="b">percpu_cmpxchg_op</span></a><span class="f">(</span><span class="b">pcp</span><span class="f">,</span> <span class="b">oval</span><span class="f">,</span> <span class="b">nval</span><span class="f">)</span>
<a name="447" /><span class="Maybe">     447:</span> 
<a name="448" /><span class="Maybe">     448:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_dGhpc19jcHVfcmVhZF84XzA_"><span class="b">this_cpu_read_8</span></a><span class="f">(</span><span class="b">pcp</span><span class="f">)</span>        <a href="cpu.c_macros_ref.html#_cGVyY3B1X2Zyb21fb3BfMA__"><span class="b">percpu_from_op</span></a><span class="f">(</span><span class="e">&quot;mov&quot;</span><span class="f">,</span> <span class="f">(</span><span class="b">pcp</span><span class="f">)</span><span class="f">,</span> <span class="e">&quot;m&quot;</span><span class="f">(</span><span class="b">pcp</span><span class="f">)</span><span class="f">)</span>
<a name="449" /><span class="Maybe">     449:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_dGhpc19jcHVfd3JpdGVfOF8w"><span class="b">this_cpu_write_8</span></a><span class="f">(</span><span class="b">pcp</span><span class="f">,</span> <span class="b">val</span><span class="f">)</span>    <a href="cpu.c_macros_ref.html#_cGVyY3B1X3RvX29wXzA_"><span class="b">percpu_to_op</span></a><span class="f">(</span><span class="e">&quot;mov&quot;</span><span class="f">,</span> <span class="f">(</span><span class="b">pcp</span><span class="f">)</span><span class="f">,</span> <span class="b">val</span><span class="f">)</span>
<a name="450" /><span class="Maybe">     450:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_dGhpc19jcHVfYWRkXzhfMA__"><span class="b">this_cpu_add_8</span></a><span class="f">(</span><span class="b">pcp</span><span class="f">,</span> <span class="b">val</span><span class="f">)</span>    <a href="cpu.c_macros_ref.html#_cGVyY3B1X2FkZF9vcF8w"><span class="b">percpu_add_op</span></a><span class="f">(</span><span class="f">(</span><span class="b">pcp</span><span class="f">)</span><span class="f">,</span> <span class="b">val</span><span class="f">)</span>
<a name="451" /><span class="Maybe">     451:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_dGhpc19jcHVfYW5kXzhfMA__"><span class="b">this_cpu_and_8</span></a><span class="f">(</span><span class="b">pcp</span><span class="f">,</span> <span class="b">val</span><span class="f">)</span>    <a href="cpu.c_macros_ref.html#_cGVyY3B1X3RvX29wXzA_"><span class="b">percpu_to_op</span></a><span class="f">(</span><span class="e">&quot;and&quot;</span><span class="f">,</span> <span class="f">(</span><span class="b">pcp</span><span class="f">)</span><span class="f">,</span> <span class="b">val</span><span class="f">)</span>
<a name="452" /><span class="Maybe">     452:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_dGhpc19jcHVfb3JfOF8w"><span class="b">this_cpu_or_8</span></a><span class="f">(</span><span class="b">pcp</span><span class="f">,</span> <span class="b">val</span><span class="f">)</span>        <a href="cpu.c_macros_ref.html#_cGVyY3B1X3RvX29wXzA_"><span class="b">percpu_to_op</span></a><span class="f">(</span><span class="e">&quot;or&quot;</span><span class="f">,</span> <span class="f">(</span><span class="b">pcp</span><span class="f">)</span><span class="f">,</span> <span class="b">val</span><span class="f">)</span>
<a name="453" /><span class="Maybe">     453:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_dGhpc19jcHVfYWRkX3JldHVybl84XzA_"><span class="b">this_cpu_add_return_8</span></a><span class="f">(</span><span class="b">pcp</span><span class="f">,</span> <span class="b">val</span><span class="f">)</span>    <a href="cpu.c_macros_noref.html#_cGVyY3B1X2FkZF9yZXR1cm5fb3BfMA__"><span class="b">percpu_add_return_op</span></a><span class="f">(</span><span class="b">pcp</span><span class="f">,</span> <span class="b">val</span><span class="f">)</span>
<a name="454" /><span class="Maybe">     454:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_dGhpc19jcHVfeGNoZ184XzA_"><span class="b">this_cpu_xchg_8</span></a><span class="f">(</span><span class="b">pcp</span><span class="f">,</span> <span class="b">nval</span><span class="f">)</span>    <a href="cpu.c_macros_noref.html#_cGVyY3B1X3hjaGdfb3BfMA__"><span class="b">percpu_xchg_op</span></a><span class="f">(</span><span class="b">pcp</span><span class="f">,</span> <span class="b">nval</span><span class="f">)</span>
<a name="455" /><span class="Maybe">     455:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_dGhpc19jcHVfY21weGNoZ184XzA_"><span class="b">this_cpu_cmpxchg_8</span></a><span class="f">(</span><span class="b">pcp</span><span class="f">,</span> <span class="b">oval</span><span class="f">,</span> <span class="b">nval</span><span class="f">)</span>    <a href="cpu.c_macros_noref.html#_cGVyY3B1X2NtcHhjaGdfb3BfMA__"><span class="b">percpu_cmpxchg_op</span></a><span class="f">(</span><span class="b">pcp</span><span class="f">,</span> <span class="b">oval</span><span class="f">,</span> <span class="b">nval</span><span class="f">)</span>
<a name="456" /><span class="Maybe">     456:</span> 
<a name="457" /><span class="Maybe">     457:</span> <span class="k">/*</span>
<a name="458" /><span class="Maybe">     458:</span> <span class="k"> * Pretty complex macro to generate cmpxchg16 instruction.  The instruction</span>
<a name="459" /><span class="Maybe">     459:</span> <span class="k"> * is not supported on early AMD64 processors so we must be able to emulate</span>
<a name="460" /><span class="Maybe">     460:</span> <span class="k"> * it in software.  The address used in the cmpxchg16 instruction must be</span>
<a name="461" /><span class="Maybe">     461:</span> <span class="k"> * aligned to a 16 byte boundary.</span>
<a name="462" /><span class="Maybe">     462:</span> <span class="k"> */</span>
<a name="463" /><span class="Maybe">     463:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_cGVyY3B1X2NtcHhjaGcxNmJfZG91YmxlXzA_"><span class="b">percpu_cmpxchg16b_double</span></a><span class="f">(</span><span class="b">pcp1</span><span class="f">,</span> <span class="b">pcp2</span><span class="f">,</span> <span class="b">o1</span><span class="f">,</span> <span class="b">o2</span><span class="f">,</span> <span class="b">n1</span><span class="f">,</span> <span class="b">n2</span><span class="f">)</span>        \
<a name="464" /><span class="Maybe">     464:</span> <span class="f">(</span><span class="f">{</span>                                    \
<a name="465" /><span class="Maybe">     465:</span>     <span class="m">bool</span> <span class="b">__ret</span><span class="f">;</span>                            \
<a name="466" /><span class="Maybe">     466:</span>     <span class="b">typeof</span><span class="f">(</span><span class="b">pcp1</span><span class="f">)</span> <span class="b">__o1</span> <span class="f">=</span> <span class="f">(</span><span class="b">o1</span><span class="f">)</span><span class="f">,</span> <span class="b">__n1</span> <span class="f">=</span> <span class="f">(</span><span class="b">n1</span><span class="f">)</span><span class="f">;</span>                \
<a name="467" /><span class="Maybe">     467:</span>     <span class="b">typeof</span><span class="f">(</span><span class="b">pcp2</span><span class="f">)</span> <span class="b">__o2</span> <span class="f">=</span> <span class="f">(</span><span class="b">o2</span><span class="f">)</span><span class="f">,</span> <span class="b">__n2</span> <span class="f">=</span> <span class="f">(</span><span class="b">n2</span><span class="f">)</span><span class="f">;</span>                \
<a name="468" /><span class="Maybe">     468:</span>     <a href="cpu.c_macros_ref.html#_YWx0ZXJuYXRpdmVfaW9fMA__"><span class="b">alternative_io</span></a><span class="f">(</span><span class="e">&quot;leaq %P1,%%rsi\n\tcall this_cpu_cmpxchg16b_emu\n\t&quot;</span><span class="f">,</span> \
<a name="469" /><span class="Maybe">     469:</span>                <span class="e">&quot;cmpxchg16b &quot;</span> <a href="cpu.c_macros_ref.html#_X19wZXJjcHVfYXJnXzA_"><span class="b">__percpu_arg</span></a><span class="f">(</span><span class="c">1</span><span class="f">)</span> <span class="e">&quot;\n\tsetz %0\n\t&quot;</span><span class="f">,</span>    \
<a name="470" /><span class="Maybe">     470:</span>                <a href="cpu.c_macros_noref.html#_WDg2X0ZFQVRVUkVfQ1gxNl8w"><span class="b">X86_FEATURE_CX16</span></a><span class="f">,</span>                \
<a name="471" /><span class="Maybe">     471:</span>                <a href="cpu.c_macros_ref.html#_QVNNX09VVFBVVDJfMA__"><span class="b">ASM_OUTPUT2</span></a><span class="f">(</span><span class="e">&quot;=a&quot;</span> <span class="f">(</span><span class="b">__ret</span><span class="f">)</span><span class="f">,</span> <span class="e">&quot;+m&quot;</span> <span class="f">(</span><span class="b">pcp1</span><span class="f">)</span><span class="f">,</span>        \
<a name="472" /><span class="Maybe">     472:</span>                    <span class="e">&quot;+m&quot;</span> <span class="f">(</span><span class="b">pcp2</span><span class="f">)</span><span class="f">,</span> <span class="e">&quot;+d&quot;</span> <span class="f">(</span><span class="b">__o2</span><span class="f">)</span><span class="f">)</span><span class="f">,</span>        \
<a name="473" /><span class="Maybe">     473:</span>                <span class="e">&quot;b&quot;</span> <span class="f">(</span><span class="b">__n1</span><span class="f">)</span><span class="f">,</span> <span class="e">&quot;c&quot;</span> <span class="f">(</span><span class="b">__n2</span><span class="f">)</span><span class="f">,</span> <span class="e">&quot;a&quot;</span> <span class="f">(</span><span class="b">__o1</span><span class="f">)</span> <span class="f">:</span> <span class="e">&quot;rsi&quot;</span><span class="f">)</span><span class="f">;</span>    \
<a name="474" /><span class="Maybe">     474:</span>     <span class="b">__ret</span><span class="f">;</span>                                \
<a name="475" /><span class="Maybe">     475:</span> <span class="f">}</span><span class="f">)</span>
<a name="476" /><span class="Maybe">     476:</span> 
<a name="477" /><span class="Maybe">     477:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_X190aGlzX2NwdV9jbXB4Y2hnX2RvdWJsZV84XzA_"><span class="b">__this_cpu_cmpxchg_double_8</span></a>    <a href="cpu.c_macros_noref.html#_cGVyY3B1X2NtcHhjaGcxNmJfZG91YmxlXzA_"><span class="b">percpu_cmpxchg16b_double</span></a>
<a name="478" /><span class="Maybe">     478:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_dGhpc19jcHVfY21weGNoZ19kb3VibGVfOF8w"><span class="b">this_cpu_cmpxchg_double_8</span></a>    <a href="cpu.c_macros_noref.html#_cGVyY3B1X2NtcHhjaGcxNmJfZG91YmxlXzA_"><span class="b">percpu_cmpxchg16b_double</span></a>
<a name="479" /><span class="Maybe">     479:</span> 
<a name="480" /><span class="Maybe">     480:</span> <span class="f">#</span><span class="n">endif</span>
<a name="481" /><span class="Maybe">     481:</span> 
<a name="482" /><span class="Maybe">     482:</span> <span class="k">/* This is not atomic against other CPUs -- CPU preemption needs to be off */</span>
<a name="483" /><span class="Maybe">     483:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_eDg2X3Rlc3RfYW5kX2NsZWFyX2JpdF9wZXJjcHVfMA__"><span class="b">x86_test_and_clear_bit_percpu</span></a><span class="f">(</span><span class="b">bit</span><span class="f">,</span> <span class="b">var</span><span class="f">)</span>                \
<a name="484" /><span class="Maybe">     484:</span> <span class="f">(</span><span class="f">{</span>                                    \
<a name="485" /><span class="Maybe">     485:</span>     <span class="m">int</span> <span class="b">old__</span><span class="f">;</span>                            \
<a name="486" /><span class="Maybe">     486:</span>     <span class="m">asm</span> <span class="m">volatile</span><span class="f">(</span><span class="e">&quot;btr %2,&quot;</span><a href="cpu.c_macros_ref.html#_X19wZXJjcHVfYXJnXzA_"><span class="b">__percpu_arg</span></a><span class="f">(</span><span class="c">1</span><span class="f">)</span><span class="e">&quot;\n\tsbbl %0,%0&quot;</span>        \
<a name="487" /><span class="Maybe">     487:</span>              <span class="f">:</span> <span class="e">&quot;=r&quot;</span> <span class="f">(</span><span class="b">old__</span><span class="f">)</span><span class="f">,</span> <span class="e">&quot;+m&quot;</span> <span class="f">(</span><span class="b">var</span><span class="f">)</span>                \
<a name="488" /><span class="Maybe">     488:</span>              <span class="f">:</span> <span class="e">&quot;dIr&quot;</span> <span class="f">(</span><span class="b">bit</span><span class="f">)</span><span class="f">)</span><span class="f">;</span>                    \
<a name="489" /><span class="Maybe">     489:</span>     <span class="b">old__</span><span class="f">;</span>                                \
<a name="490" /><span class="Maybe">     490:</span> <span class="f">}</span><span class="f">)</span>
<a name="491" /><span class="Maybe">     491:</span> 
<a name="492" /><span class="Maybe">     492:</span> <span class="m">static</span> <a href="cpu.c_macros_ref.html#_X19hbHdheXNfaW5saW5lXzA_"><span class="b">__always_inline</span></a> <span class="m">int</span> <span class="b">x86_this_cpu_constant_test_bit</span><span class="f">(</span><span class="m">unsigned</span> <span class="m">int</span> <span class="b">nr</span><span class="f">,</span>
<a name="493" /><span class="Maybe">     493:</span>                         <span class="m">const</span> <span class="m">unsigned</span> <span class="m">long</span> <a href="cpu.c_macros_ref.html#_X19wZXJjcHVfMA__"><span class="b">__percpu</span></a> <span class="f">*</span><span class="b">addr</span><span class="f">)</span>
<a name="494" /><span class="Maybe">     494:</span> <span class="f">{</span>
<a name="495" /><span class="Maybe">     495:</span>     <span class="m">unsigned</span> <span class="m">long</span> <a href="cpu.c_macros_ref.html#_X19wZXJjcHVfMA__"><span class="b">__percpu</span></a> <span class="f">*</span><span class="b">a</span> <span class="f">=</span> <span class="f">(</span><span class="m">unsigned</span> <span class="m">long</span> <span class="f">*</span><span class="f">)</span><span class="b">addr</span> <span class="f">+</span> <span class="b">nr</span> <span class="f">/</span> <a href="cpu.c_macros_ref.html#_QklUU19QRVJfTE9OR18w"><span class="b">BITS_PER_LONG</span></a><span class="f">;</span>
<a name="496" /><span class="Maybe">     496:</span> 
<a name="497" /><span class="Maybe">     497:</span> <span class="f">#</span><span class="n">ifdef</span> <a href="cpu.c_macros_ref.html#_Q09ORklHX1g4Nl82NF8w"><span class="b">CONFIG_X86_64</span></a>
<a name="498" /><span class="Maybe">     498:</span>     <span class="m">return</span> <span class="f">(</span><span class="f">(</span><span class="c">1UL</span> <span class="f">&lt;&lt;</span> <span class="f">(</span><span class="b">nr</span> <span class="f">%</span> <a href="cpu.c_macros_ref.html#_QklUU19QRVJfTE9OR18w"><span class="b">BITS_PER_LONG</span></a><span class="f">)</span><span class="f">)</span> <span class="f">&amp;</span> <a href="cpu.c_macros_ref.html#_X190aGlzX2NwdV9yZWFkXzhfMA__"><span class="b">__this_cpu_read_8</span></a><span class="f">(</span><span class="f">*</span><span class="b">a</span><span class="f">)</span><span class="f">)</span> <span class="f">!=</span> <span class="c">0</span><span class="f">;</span>
<a name="499" /><span class="False">     499:</span> <span class="f">#</span><span class="n">else</span>
<a name="500" /><span class="False">     500:</span>     <span class="m">return</span> <span class="f">(</span><span class="f">(</span><span class="c">1UL</span> <span class="f">&lt;&lt;</span> <span class="f">(</span><span class="b">nr</span> <span class="f">%</span> <a href="cpu.c_macros_ref.html#_QklUU19QRVJfTE9OR18w"><span class="b">BITS_PER_LONG</span></a><span class="f">)</span><span class="f">)</span> <span class="f">&amp;</span> <a href="cpu.c_macros_ref.html#_X190aGlzX2NwdV9yZWFkXzRfMA__"><span class="b">__this_cpu_read_4</span></a><span class="f">(</span><span class="f">*</span><span class="b">a</span><span class="f">)</span><span class="f">)</span> <span class="f">!=</span> <span class="c">0</span><span class="f">;</span>
<a name="501" /><span class="Maybe">     501:</span> <span class="f">#</span><span class="n">endif</span>
<a name="502" /><span class="Maybe">     502:</span> <span class="f">}</span>
<a name="503" /><span class="Maybe">     503:</span> 
<a name="504" /><span class="Maybe">     504:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">int</span> <span class="b">x86_this_cpu_variable_test_bit</span><span class="f">(</span><span class="m">int</span> <span class="b">nr</span><span class="f">,</span>
<a name="505" /><span class="Maybe">     505:</span>                         <span class="m">const</span> <span class="m">unsigned</span> <span class="m">long</span> <a href="cpu.c_macros_ref.html#_X19wZXJjcHVfMA__"><span class="b">__percpu</span></a> <span class="f">*</span><span class="b">addr</span><span class="f">)</span>
<a name="506" /><span class="Maybe">     506:</span> <span class="f">{</span>
<a name="507" /><span class="Maybe">     507:</span>     <span class="m">int</span> <span class="b">oldbit</span><span class="f">;</span>
<a name="508" /><span class="Maybe">     508:</span> 
<a name="509" /><span class="Maybe">     509:</span>     <span class="m">asm</span> <span class="m">volatile</span><span class="f">(</span><span class="e">&quot;bt &quot;</span><a href="cpu.c_macros_ref.html#_X19wZXJjcHVfYXJnXzA_"><span class="b">__percpu_arg</span></a><span class="f">(</span><span class="c">2</span><span class="f">)</span><span class="e">&quot;,%1\n\t&quot;</span>
<a name="510" /><span class="Maybe">     510:</span>             <span class="e">&quot;sbb %0,%0&quot;</span>
<a name="511" /><span class="Maybe">     511:</span>             <span class="f">:</span> <span class="e">&quot;=r&quot;</span> <span class="f">(</span><span class="b">oldbit</span><span class="f">)</span>
<a name="512" /><span class="Maybe">     512:</span>             <span class="f">:</span> <span class="e">&quot;m&quot;</span> <span class="f">(</span><span class="f">*</span><span class="f">(</span><span class="m">unsigned</span> <span class="m">long</span> <span class="f">*</span><span class="f">)</span><span class="b">addr</span><span class="f">)</span><span class="f">,</span> <span class="e">&quot;Ir&quot;</span> <span class="f">(</span><span class="b">nr</span><span class="f">)</span><span class="f">)</span><span class="f">;</span>
<a name="513" /><span class="Maybe">     513:</span> 
<a name="514" /><span class="Maybe">     514:</span>     <span class="m">return</span> <span class="b">oldbit</span><span class="f">;</span>
<a name="515" /><span class="Maybe">     515:</span> <span class="f">}</span>
<a name="516" /><span class="Maybe">     516:</span> 
<a name="517" /><span class="Maybe">     517:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_eDg2X3RoaXNfY3B1X3Rlc3RfYml0XzA_"><span class="b">x86_this_cpu_test_bit</span></a><span class="f">(</span><span class="b">nr</span><span class="f">,</span> <span class="b">addr</span><span class="f">)</span>            \
<a name="518" /><span class="Maybe">     518:</span>     <span class="f">(</span><span class="b">__builtin_constant_p</span><span class="f">(</span><span class="f">(</span><span class="b">nr</span><span class="f">)</span><span class="f">)</span>            \
<a name="519" /><span class="Maybe">     519:</span>      <span class="f">?</span> <span class="b">x86_this_cpu_constant_test_bit</span><span class="f">(</span><span class="f">(</span><span class="b">nr</span><span class="f">)</span><span class="f">,</span> <span class="f">(</span><span class="b">addr</span><span class="f">)</span><span class="f">)</span>    \
<a name="520" /><span class="Maybe">     520:</span>      <span class="f">:</span> <span class="b">x86_this_cpu_variable_test_bit</span><span class="f">(</span><span class="f">(</span><span class="b">nr</span><span class="f">)</span><span class="f">,</span> <span class="f">(</span><span class="b">addr</span><span class="f">)</span><span class="f">)</span><span class="f">)</span>
<a name="521" /><span class="Maybe">     521:</span> 
<a name="522" /><span class="Maybe">     522:</span> 
<a name="523" /><span class="Maybe">     523:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="m">asm</span><span class="f">-</span><span class="b">generic</span><span class="f">/</span><span class="b">percpu</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="524" /><span class="Maybe">     524:</span> 
<a name="525" /><span class="Maybe">     525:</span> <span class="k">/* We can use this directly for local CPU (faster). */</span>
<a name="526" /><span class="Maybe">     526:</span> <a href="cpu.c_macros_ref.html#_REVDTEFSRV9QRVJfQ1BVXzA_"><span class="b">DECLARE_PER_CPU</span></a><span class="f">(</span><span class="m">unsigned</span> <span class="m">long</span><span class="f">,</span> <span class="b">this_cpu_off</span><span class="f">)</span><span class="f">;</span>
<a name="527" /><span class="Maybe">     527:</span> 
<a name="528" /><span class="Maybe">     528:</span> <span class="f">#</span><span class="n">endif</span> <span class="k">/* !__ASSEMBLY__ */</span>
<a name="529" /><span class="Maybe">     529:</span> 
<a name="530" /><span class="Maybe">     530:</span> <span class="f">#</span><span class="n">ifdef</span> <a href="cpu.c_macros_ref.html#_Q09ORklHX1NNUF8w"><span class="b">CONFIG_SMP</span></a>
<a name="531" /><span class="Maybe">     531:</span> 
<a name="532" /><span class="Maybe">     532:</span> <span class="k">/*</span>
<a name="533" /><span class="Maybe">     533:</span> <span class="k"> * Define the &quot;EARLY_PER_CPU&quot; macros.  These are used for some per_cpu</span>
<a name="534" /><span class="Maybe">     534:</span> <span class="k"> * variables that are initialized and accessed before there are per_cpu</span>
<a name="535" /><span class="Maybe">     535:</span> <span class="k"> * areas allocated.</span>
<a name="536" /><span class="Maybe">     536:</span> <span class="k"> */</span>
<a name="537" /><span class="Maybe">     537:</span> 
<a name="538" /><span class="Maybe">     538:</span> <span class="f">#</span><span class="n">define</span>    <a href="cpu.c_macros_noref.html#_REVGSU5FX0VBUkxZX1BFUl9DUFVfMA__"><span class="b">DEFINE_EARLY_PER_CPU</span></a><span class="f">(</span><span class="b">_type</span><span class="f">,</span> <span class="b">_name</span><span class="f">,</span> <span class="b">_initvalue</span><span class="f">)</span>            \
<a name="539" /><span class="Maybe">     539:</span>     <a href="cpu.c_macros_noref.html#_REVGSU5FX1BFUl9DUFVfMA__"><span class="b">DEFINE_PER_CPU</span></a><span class="f">(</span><span class="b">_type</span><span class="f">,</span> <span class="b">_name</span><span class="f">)</span> <span class="f">=</span> <span class="b">_initvalue</span><span class="f">;</span>            \
<a name="540" /><span class="Maybe">     540:</span>     <span class="b">__typeof__</span><span class="f">(</span><span class="b">_type</span><span class="f">)</span> <span class="b">_name</span><span class="f">##</span><span class="b">_early_map</span><span class="f">[</span><a href="cpu.c_macros_ref.html#_TlJfQ1BVU18w"><span class="b">NR_CPUS</span></a><span class="f">]</span> <a href="cpu.c_macros_ref.html#_X19pbml0ZGF0YV8w"><span class="b">__initdata</span></a> <span class="f">=</span>    \
<a name="541" /><span class="Maybe">     541:</span>                 <span class="f">{</span> <span class="f">[</span><span class="c">0</span> <span class="f">...</span> <a href="cpu.c_macros_ref.html#_TlJfQ1BVU18w"><span class="b">NR_CPUS</span></a><span class="f">-</span><span class="c">1</span><span class="f">]</span> <span class="f">=</span> <span class="b">_initvalue</span> <span class="f">}</span><span class="f">;</span>    \
<a name="542" /><span class="Maybe">     542:</span>     <span class="b">__typeof__</span><span class="f">(</span><span class="b">_type</span><span class="f">)</span> <span class="f">*</span><span class="b">_name</span><span class="f">##</span><span class="b">_early_ptr</span> <a href="cpu.c_macros_noref.html#_X19yZWZkYXRhXzA_"><span class="b">__refdata</span></a> <span class="f">=</span> <span class="b">_name</span><span class="f">##</span><span class="b">_early_map</span>
<a name="543" /><span class="Maybe">     543:</span> 
<a name="544" /><span class="Maybe">     544:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_REVGSU5FX0VBUkxZX1BFUl9DUFVfUkVBRF9NT1NUTFlfMA__"><span class="b">DEFINE_EARLY_PER_CPU_READ_MOSTLY</span></a><span class="f">(</span><span class="b">_type</span><span class="f">,</span> <span class="b">_name</span><span class="f">,</span> <span class="b">_initvalue</span><span class="f">)</span>    \
<a name="545" /><span class="Maybe">     545:</span>     <a href="cpu.c_macros_noref.html#_REVGSU5FX1BFUl9DUFVfUkVBRF9NT1NUTFlfMA__"><span class="b">DEFINE_PER_CPU_READ_MOSTLY</span></a><span class="f">(</span><span class="b">_type</span><span class="f">,</span> <span class="b">_name</span><span class="f">)</span> <span class="f">=</span> <span class="b">_initvalue</span><span class="f">;</span>        \
<a name="546" /><span class="Maybe">     546:</span>     <span class="b">__typeof__</span><span class="f">(</span><span class="b">_type</span><span class="f">)</span> <span class="b">_name</span><span class="f">##</span><span class="b">_early_map</span><span class="f">[</span><a href="cpu.c_macros_ref.html#_TlJfQ1BVU18w"><span class="b">NR_CPUS</span></a><span class="f">]</span> <a href="cpu.c_macros_ref.html#_X19pbml0ZGF0YV8w"><span class="b">__initdata</span></a> <span class="f">=</span>    \
<a name="547" /><span class="Maybe">     547:</span>                 <span class="f">{</span> <span class="f">[</span><span class="c">0</span> <span class="f">...</span> <a href="cpu.c_macros_ref.html#_TlJfQ1BVU18w"><span class="b">NR_CPUS</span></a><span class="f">-</span><span class="c">1</span><span class="f">]</span> <span class="f">=</span> <span class="b">_initvalue</span> <span class="f">}</span><span class="f">;</span>    \
<a name="548" /><span class="Maybe">     548:</span>     <span class="b">__typeof__</span><span class="f">(</span><span class="b">_type</span><span class="f">)</span> <span class="f">*</span><span class="b">_name</span><span class="f">##</span><span class="b">_early_ptr</span> <a href="cpu.c_macros_noref.html#_X19yZWZkYXRhXzA_"><span class="b">__refdata</span></a> <span class="f">=</span> <span class="b">_name</span><span class="f">##</span><span class="b">_early_map</span>
<a name="549" /><span class="Maybe">     549:</span> 
<a name="550" /><span class="Maybe">     550:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_RVhQT1JUX0VBUkxZX1BFUl9DUFVfU1lNQk9MXzA_"><span class="b">EXPORT_EARLY_PER_CPU_SYMBOL</span></a><span class="f">(</span><span class="b">_name</span><span class="f">)</span>            \
<a name="551" /><span class="Maybe">     551:</span>     <a href="cpu.c_macros_noref.html#_RVhQT1JUX1BFUl9DUFVfU1lNQk9MXzA_"><span class="b">EXPORT_PER_CPU_SYMBOL</span></a><span class="f">(</span><span class="b">_name</span><span class="f">)</span>
<a name="552" /><span class="Maybe">     552:</span> 
<a name="553" /><span class="Maybe">     553:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_REVDTEFSRV9FQVJMWV9QRVJfQ1BVXzA_"><span class="b">DECLARE_EARLY_PER_CPU</span></a><span class="f">(</span><span class="b">_type</span><span class="f">,</span> <span class="b">_name</span><span class="f">)</span>            \
<a name="554" /><span class="Maybe">     554:</span>     <a href="cpu.c_macros_ref.html#_REVDTEFSRV9QRVJfQ1BVXzA_"><span class="b">DECLARE_PER_CPU</span></a><span class="f">(</span><span class="b">_type</span><span class="f">,</span> <span class="b">_name</span><span class="f">)</span><span class="f">;</span>                \
<a name="555" /><span class="Maybe">     555:</span>     <span class="m">extern</span> <span class="b">__typeof__</span><span class="f">(</span><span class="b">_type</span><span class="f">)</span> <span class="f">*</span><span class="b">_name</span><span class="f">##</span><span class="b">_early_ptr</span><span class="f">;</span>        \
<a name="556" /><span class="Maybe">     556:</span>     <span class="m">extern</span> <span class="b">__typeof__</span><span class="f">(</span><span class="b">_type</span><span class="f">)</span>  <span class="b">_name</span><span class="f">##</span><span class="b">_early_map</span><span class="f">[</span><span class="f">]</span>
<a name="557" /><span class="Maybe">     557:</span> 
<a name="558" /><span class="Maybe">     558:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_REVDTEFSRV9FQVJMWV9QRVJfQ1BVX1JFQURfTU9TVExZXzA_"><span class="b">DECLARE_EARLY_PER_CPU_READ_MOSTLY</span></a><span class="f">(</span><span class="b">_type</span><span class="f">,</span> <span class="b">_name</span><span class="f">)</span>        \
<a name="559" /><span class="Maybe">     559:</span>     <a href="cpu.c_macros_ref.html#_REVDTEFSRV9QRVJfQ1BVX1JFQURfTU9TVExZXzA_"><span class="b">DECLARE_PER_CPU_READ_MOSTLY</span></a><span class="f">(</span><span class="b">_type</span><span class="f">,</span> <span class="b">_name</span><span class="f">)</span><span class="f">;</span>        \
<a name="560" /><span class="Maybe">     560:</span>     <span class="m">extern</span> <span class="b">__typeof__</span><span class="f">(</span><span class="b">_type</span><span class="f">)</span> <span class="f">*</span><span class="b">_name</span><span class="f">##</span><span class="b">_early_ptr</span><span class="f">;</span>        \
<a name="561" /><span class="Maybe">     561:</span>     <span class="m">extern</span> <span class="b">__typeof__</span><span class="f">(</span><span class="b">_type</span><span class="f">)</span>  <span class="b">_name</span><span class="f">##</span><span class="b">_early_map</span><span class="f">[</span><span class="f">]</span>
<a name="562" /><span class="Maybe">     562:</span> 
<a name="563" /><span class="Maybe">     563:</span> <span class="f">#</span><span class="n">define</span>    <a href="cpu.c_macros_ref.html#_ZWFybHlfcGVyX2NwdV9wdHJfMA__"><span class="b">early_per_cpu_ptr</span></a><span class="f">(</span><span class="b">_name</span><span class="f">)</span> <span class="f">(</span><span class="b">_name</span><span class="f">##</span><span class="b">_early_ptr</span><span class="f">)</span>
<a name="564" /><span class="Maybe">     564:</span> <span class="f">#</span><span class="n">define</span>    <a href="cpu.c_macros_noref.html#_ZWFybHlfcGVyX2NwdV9tYXBfMA__"><span class="b">early_per_cpu_map</span></a><span class="f">(</span><span class="b">_name</span><span class="f">,</span> <span class="b">_idx</span><span class="f">)</span> <span class="f">(</span><span class="b">_name</span><span class="f">##</span><span class="b">_early_map</span><span class="f">[</span><span class="b">_idx</span><span class="f">]</span><span class="f">)</span>
<a name="565" /><span class="Maybe">     565:</span> <span class="f">#</span><span class="n">define</span>    <a href="cpu.c_macros_ref.html#_ZWFybHlfcGVyX2NwdV8w"><span class="b">early_per_cpu</span></a><span class="f">(</span><span class="b">_name</span><span class="f">,</span> <span class="b">_cpu</span><span class="f">)</span>                 \
<a name="566" /><span class="Maybe">     566:</span>     <span class="f">*</span><span class="f">(</span><a href="cpu.c_macros_ref.html#_ZWFybHlfcGVyX2NwdV9wdHJfMA__"><span class="b">early_per_cpu_ptr</span></a><span class="f">(</span><span class="b">_name</span><span class="f">)</span> <span class="f">?</span>                \
<a name="567" /><span class="Maybe">     567:</span>         <span class="f">&amp;</span><a href="cpu.c_macros_ref.html#_ZWFybHlfcGVyX2NwdV9wdHJfMA__"><span class="b">early_per_cpu_ptr</span></a><span class="f">(</span><span class="b">_name</span><span class="f">)</span><span class="f">[</span><span class="b">_cpu</span><span class="f">]</span> <span class="f">:</span>        \
<a name="568" /><span class="Maybe">     568:</span>         <span class="f">&amp;</span><a href="cpu.c_macros_ref.html#_cGVyX2NwdV8w"><span class="b">per_cpu</span></a><span class="f">(</span><span class="b">_name</span><span class="f">,</span> <span class="b">_cpu</span><span class="f">)</span><span class="f">)</span>
<a name="569" /><span class="Maybe">     569:</span> 
<a name="570" /><span class="False">     570:</span> <span class="f">#</span><span class="n">else</span>    <span class="k">/* !CONFIG_SMP */</span>
<a name="571" /><span class="False">     571:</span> <span class="f">#</span><span class="n">define</span>    <a href="cpu.c_macros_noref.html#_REVGSU5FX0VBUkxZX1BFUl9DUFVfMA__"><span class="b">DEFINE_EARLY_PER_CPU</span></a><span class="f">(</span><span class="b">_type</span><span class="f">,</span> <span class="b">_name</span><span class="f">,</span> <span class="b">_initvalue</span><span class="f">)</span>        \
<a name="572" /><span class="False">     572:</span>     <a href="cpu.c_macros_noref.html#_REVGSU5FX1BFUl9DUFVfMA__"><span class="b">DEFINE_PER_CPU</span></a><span class="f">(</span><span class="b">_type</span><span class="f">,</span> <span class="b">_name</span><span class="f">)</span> <span class="f">=</span> <span class="b">_initvalue</span>
<a name="573" /><span class="False">     573:</span> 
<a name="574" /><span class="False">     574:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_REVGSU5FX0VBUkxZX1BFUl9DUFVfUkVBRF9NT1NUTFlfMA__"><span class="b">DEFINE_EARLY_PER_CPU_READ_MOSTLY</span></a><span class="f">(</span><span class="b">_type</span><span class="f">,</span> <span class="b">_name</span><span class="f">,</span> <span class="b">_initvalue</span><span class="f">)</span>    \
<a name="575" /><span class="False">     575:</span>     <a href="cpu.c_macros_noref.html#_REVGSU5FX1BFUl9DUFVfUkVBRF9NT1NUTFlfMA__"><span class="b">DEFINE_PER_CPU_READ_MOSTLY</span></a><span class="f">(</span><span class="b">_type</span><span class="f">,</span> <span class="b">_name</span><span class="f">)</span> <span class="f">=</span> <span class="b">_initvalue</span>
<a name="576" /><span class="False">     576:</span> 
<a name="577" /><span class="False">     577:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_RVhQT1JUX0VBUkxZX1BFUl9DUFVfU1lNQk9MXzA_"><span class="b">EXPORT_EARLY_PER_CPU_SYMBOL</span></a><span class="f">(</span><span class="b">_name</span><span class="f">)</span>            \
<a name="578" /><span class="False">     578:</span>     <a href="cpu.c_macros_noref.html#_RVhQT1JUX1BFUl9DUFVfU1lNQk9MXzA_"><span class="b">EXPORT_PER_CPU_SYMBOL</span></a><span class="f">(</span><span class="b">_name</span><span class="f">)</span>
<a name="579" /><span class="False">     579:</span> 
<a name="580" /><span class="False">     580:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_REVDTEFSRV9FQVJMWV9QRVJfQ1BVXzA_"><span class="b">DECLARE_EARLY_PER_CPU</span></a><span class="f">(</span><span class="b">_type</span><span class="f">,</span> <span class="b">_name</span><span class="f">)</span>            \
<a name="581" /><span class="False">     581:</span>     <a href="cpu.c_macros_ref.html#_REVDTEFSRV9QRVJfQ1BVXzA_"><span class="b">DECLARE_PER_CPU</span></a><span class="f">(</span><span class="b">_type</span><span class="f">,</span> <span class="b">_name</span><span class="f">)</span>
<a name="582" /><span class="False">     582:</span> 
<a name="583" /><span class="False">     583:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_REVDTEFSRV9FQVJMWV9QRVJfQ1BVX1JFQURfTU9TVExZXzA_"><span class="b">DECLARE_EARLY_PER_CPU_READ_MOSTLY</span></a><span class="f">(</span><span class="b">_type</span><span class="f">,</span> <span class="b">_name</span><span class="f">)</span>        \
<a name="584" /><span class="False">     584:</span>     <a href="cpu.c_macros_ref.html#_REVDTEFSRV9QRVJfQ1BVX1JFQURfTU9TVExZXzA_"><span class="b">DECLARE_PER_CPU_READ_MOSTLY</span></a><span class="f">(</span><span class="b">_type</span><span class="f">,</span> <span class="b">_name</span><span class="f">)</span>
<a name="585" /><span class="False">     585:</span> 
<a name="586" /><span class="False">     586:</span> <span class="f">#</span><span class="n">define</span>    <a href="cpu.c_macros_ref.html#_ZWFybHlfcGVyX2NwdV8w"><span class="b">early_per_cpu</span></a><span class="f">(</span><span class="b">_name</span><span class="f">,</span> <span class="b">_cpu</span><span class="f">)</span> <a href="cpu.c_macros_ref.html#_cGVyX2NwdV8w"><span class="b">per_cpu</span></a><span class="f">(</span><span class="b">_name</span><span class="f">,</span> <span class="b">_cpu</span><span class="f">)</span>
<a name="587" /><span class="False">     587:</span> <span class="f">#</span><span class="n">define</span>    <a href="cpu.c_macros_ref.html#_ZWFybHlfcGVyX2NwdV9wdHJfMA__"><span class="b">early_per_cpu_ptr</span></a><span class="f">(</span><span class="b">_name</span><span class="f">)</span> <a href="cpu.c_macros_ref.html#_TlVMTF8w"><span class="b">NULL</span></a>
<a name="588" /><span class="False">     588:</span> <span class="k">/* no early_per_cpu_map() */</span>
<a name="589" /><span class="False">     589:</span> 
<a name="590" /><span class="Maybe">     590:</span> <span class="f">#</span><span class="n">endif</span>    <span class="k">/* !CONFIG_SMP */</span>
<a name="591" /><span class="Maybe">     591:</span> 
<a name="592" /><span class="True">     592:</span> <span class="f">#</span><span class="n">endif</span> <span class="k">/* _ASM_X86_PERCPU_H */</span>
<a name="593" /><span class="True">     593:</span> </pre>
  </body>
</html>
